如何在div标签下使用javascript在Mozilla中获取所有标签
function handle_node(entity)
{
var i = 0;
var varName = window.event.srcElement.name.substring(0,7);
var fieldValue = window.event.srcElement.value;
var fieldName;
// traverse thru all the products in the family
for(i=0; i < entity.childNodes.length; i++)
{
if(entity.childNodes(i).tagName == "DIV")
{
handle_child_node(entity.childNodes(i))
}
}
}
function handle_child_node(entity)
{
var it = 0;
var oObject = entity.all;
if (oObject != null)
{
if (oObject.length != null)
{
for (it = 0; it < oObject.length; it++)
{
if (oObject(it).tagName == 'INPUT' && oObject(it).attributes["type"].nodeValue == 'checkbox')
{
resetTextFieldValue(window.event.srcElement, oObject(it));
}
}
}
}
}
上述代码在IE中正常工作。但它不适用于Mozilla。然后我改变下面给出的代码。但它没有得到div标签下的标签。代码可以在Mozilla上进行哪些更改?如何在div标签下使用javascript在Mozilla中获取所有标签
function handle_node(entity)
{
var i = 0;
if (entity.hasChildNodes())
{
children= entity.childNodes;
for(i=0; i < children.length; i++) {
var sibling= children[i];
if(sibling.tagName == "DIV") {
var elms = document.getElementsByTagName(sibling);
handle_child_node(sibling)
}
}
}
}
function handle_child_node(entity)
{
alert("entity"+entity);
var it = 0;
var oObject = entity.all;
if (oObject != null)
{
if (oObject.length != null)
{
for (it = 0; it < oObject.length; it++)
{
if (oObject(it).tagName == 'INPUT' && oObject(it).attributes["type"].nodeValue == 'checkbox')
{
resetTextFieldValue(window.event.srcElement, oObject(it));
}
}
}
}
}
在句柄handle_child_node(兄弟)正确吗?我认为var oObject = entity.all;不工作。
您的handle_node
函数看起来像MicroSoft的ECMAScript(JScript)子/超集中的事件处理程序。幸运的是,事件模型是X浏览器代码问题的主要来源。你的代码在我看来就是典型的JScript。查看有关quirksmode事件的文章,以更好地了解/了解这些差异。
现在,虽然,这里是你应该知道的:
JScript不活动对象的实例传递到处理程序,但全球对象 - window
- 有一个名为event
财产,而所有其他浏览器执行将事件对象传递给处理程序。一般情况下,你会看到处理程序看起来像这样:
document.getElementById('foo').onclick = bar;//bar is handler
function bar(e)
{
e = e || window.event;//use passed event instance, or get event property for IE
var element = e.target || e.srcElement;//the reference to the DOM element is assigned to another property in JScript
//a lot of stuff
if (e.preventDefault)
{//w3c's events are "controlled" with these methods
e.preventDefault();
e.stopPropagation();
}
e.returnValue = false;//IE's jScript, but W3C engines have these properties, too
e.cancelBubble = true;
}
什么这些方法和属性意味着(如果你不知道)是你可以在怪异模式了解。
简而言之:您的代码适用于IE,因为您使用的是在JScript中引用DOM节点的属性,并且您假定事件对象是全局引用,但FF,Chrome/Chromium中并不是这种情况, Safari,Opera ...所以你需要先解决这个问题。
之后,要获取div中的所有子节点,您根本不需要children
属性。更重要的是:你不应该依赖这个属性:Mozilla的引擎将把空白列为孩子。 Here's a list of references to children, and the X-browser differences。
基本上,你真正需要做的是这样的:
var children = divReference.getElementsByTagName('*');
,你就会得到你永远需要的所有引用一个NodesList
对象...
什么这个想法
function FindTags()
{
var childDiv = document.getElementById("yourdiv").childNodes;
for (i = 0; i < childDiv.length; i++)
{
if (childDiv[i].tagName == "A")
{
childDiv[i].style.display = "block";
}
if (childDiv[i].tagName == "SPAN")
{
childDiv[i].style.fontWeight = "normal";
}
//and so on for all tags you can do any thing
}
}
希望这helps.enjoy
'FindTags'不是构造函数。约定规定构造函数以大写字母开头,而常规函数以小写字母开头。使用包含'child'的属性也有风险(请参阅我的答案)。你也在for循环中创建了一个全局变量('i'),并且我会在循环内部使用'switch'或者-attane-else if:如果'tagName'是''A' ',没有必要检查'tagName =='DIV''也是...对于挑剔的对不起... ...但只有很多小的东西可能会派上用场 –
你能设置一个[的jsfiddle(http://jsfiddle.net),所以我们可以看到如何绑定事件处理程序,因为该处理程序也需要一些工作 –