在IE8及以下版本中,JavaScript中的“Node”未定义

3
我有以下代码,似乎在除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 的相同消息,所以我声明了它。之后我得到以下错误:

无法从未定义或空引用中获取“TEXT_NODE”属性

有人能帮我修复这个问题吗,或者有人能想到更好的方法来得到相同的结果。谢谢。

3个回答

8
< p > < code > TEXT_NODE 常量的值为 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
};

1

对于IE8及以下版本,node无法使用,将其更改为window即可解决问题。


0
我猜你的结构大概是这样的:

<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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接