【问题标题】:Javascript 'Node' undefined in IE8 and underIE8 及以下未定义的 Javascript 'Node'
【发布时间】:2012-11-02 21:27:12
【问题描述】:

我的以下代码似乎在除 IE8 及以下版本之外的所有浏览器中都能正常工作。

$("table.availability").each( function() {
    var siteName = $(this).parent().siblings("h2").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text()
    alert(sitename);
});

它获取一个元素的内容并去除子元素中包含的所有内容,只留下该元素的文本。

我得到的错误是 Node 未定义 - 所以我在 js 文件的顶部声明它,然后得到关于 TEXT_NODE 的相同消息,所以我声明了这一点。然后我收到以下错误:

Unable to get property 'TEXT_NODE' of undefined or null reference

谁能帮我解决这个问题,或者谁能想到更好的方法来获得相同的结果。谢谢。

【问题讨论】:

    标签: javascript jquery nodes textnode


    【解决方案1】:

    对于 IE8 及以下版本节点不起作用,将 node 更改为 window 对我有用。

    【讨论】:

      【解决方案2】:

      我猜你的结构是这样的:

      <h2>
          text to filter
          <span>other text</span>
      </h2>
      

      并且您正试图过滤掉 h2 中的“其他文本”? 如果是这样 - 为什么不在您需要的文本周围添加另一个标签包装器,例如

      <h2>
          <span class="text-to-filter">text to filter</span>
          <span>other text</span>
      </h2>
      

      然后这样做:

      $(this).parent().siblings("h2").find('.text-to-filter').text()
      

      【讨论】:

        【解决方案3】:

        TEXT_NODE 常量有一个value of 3。您可以使用它:

        return this.nodeType === 3;
        

        旧版本的 IE 只是没有实现 Node 接口,但它们仍然遵循 DOM 规范并分配正确的 nodeType 属性值。

        如果你想使用“常量”,你可以自己声明一个Node对象:

        var Node = Node || {
            ELEMENT_NODE: 1,
            ATTRIBUTE_NODE: 2,
            TEXT_NODE: 3
            // etc... if you might need other node types
        };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多