如何在mozilla中使用javascript获取div标记下的所有标记 函数句柄\节点(实体) { var i=0; var varName=window.event.srcement.name.substring(0,7); var fieldValue=window.event.srcement.value; 变量字段名; //遍历该系列中的所有产品 对于(i=0;i
上述代码在IE中运行良好,但在Mozilla中不起作用。然后我修改了下面给出的代码,但是它没有在div-tag下得到标签。什么样的更改可以使代码在Mozilla上工作如何在mozilla中使用javascript获取div标记下的所有标记 函数句柄\节点(实体) { var i=0; var varName=window.event.srcement.name.substring(0,7); var fieldValue=window.event.srcement.value; 变量字段名; //遍历该系列中的所有产品 对于(i=0;i,javascript,mozilla,Javascript,Mozilla,上述代码在IE中运行良好,但在Mozilla中不起作用。然后我修改了下面给出的代码,但是它没有在div-tag下得到标签。什么样的更改可以使代码在Mozilla上工作 function handle_node(entity) { var i = 0; var varName = window.event.srcElement.name.substring(0,7); var fieldValue = window.event.srcElement.value;
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));
}
}
}
}
}
函数句柄\节点(实体)
{
var i=0;
if(entity.hasChildNodes())
{
children=entity.childNodes;
对于(i=0;i
联机句柄\u子节点\u节点(同级)是否正确?我认为var oObject=entity.all;不工作 您的
handle\u节点
函数看起来像是MicroSoft ECMAScript(JScript)的子集/超集中的事件处理程序。幸运的是,事件模型是X浏览器代码问题的主要来源。在我看来,您的代码是典型的JScript。请阅读关于上一页事件的文章,以便更好地了解/理解这些差异。不过,就目前而言,以下是您应该知道的: JScript不会将事件对象的实例传递给处理程序,但是全局对象-
窗口
-有一个名为事件
的属性,而所有其他浏览器都会将事件对象传递给处理程序。通常,您会看到处理程序如下所示:
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));
}
}
}
}
}
这些方法和属性的含义(如果您不知道)可以在quirksmode上阅读。简而言之:您的代码在IE上工作,因为您使用的是JScript中引用DOM节点的属性,并且假设事件对象是全局引用,但在FF、Chrome/Chrome、Safari、Opera中不是这样的。。。所以你需要先解决这个问题 之后,要获取div中的所有子节点,根本不需要
children
属性。更重要的是:你不应该依赖这个属性:Mozilla的引擎会将空白列为子项
基本上,您真正需要做的就是:
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;
}
你会得到一个节点列表
对象,其中包含你需要的所有引用…这个想法怎么样
var children = divReference.getElementsByTagName('*');
函数FindTags()
{
var childDiv=document.getElementById(“yourdiv”).childNodes;
对于(i=0;i
希望这能有所帮助。请欣赏您是否可以设置一个,以便我们可以看到您如何绑定事件处理程序,因为该处理程序也需要一些工作
FindTags
不是构造函数。约定要求构造函数以大写开头,而常规函数以小写开头。使用包含child
的属性也有风险(参见我的答案)。您还在for循环中创建一个全局变量(i
),我可以在循环中使用switch
或-至少是,如果标记名是'a'
,则无需检查标记名=='DIV'
。。。对不起,我吹毛求疵。。。但在今后的道路上,有很多小东西可能会派上用场
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
}
}