0
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 上运行?

  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(sibling) 正确吗?我认为 var oObject = entity.all; 不工作。

4

2 回答 2

0

您的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;
}

这些方法和属性的含义(如果您不知道)是您可以在 quirksmode 上阅读的内容。
简而言之:您的代码可以在 IE 上运行,因为您使用的是在 JScript 中引用 DOM 节点的属性,并且您假设事件对象是全局引用,但在 FF、Chrome/Chromium、Safari、 Opera...所以你需要先解决这个问题。

之后,要获取 div 中的所有子节点,您根本不需要该children属性。更重要的是:您不应该依赖该属性:Mozilla 的引擎会将空白列为子项。这是对孩子的引用列表,以及 X 浏览器的差异

基本上,您真正需要做的就是:

var children = divReference.getElementsByTagName('*');

你会得到一个NodesList包含所有你需要的引用的对象......

于 2013-01-22T11:35:01.267 回答
0

这个想法怎么样

    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
            }
        }

希望这有帮助。享受

于 2013-01-22T11:35:26.893 回答