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所以我声明它。然后我收到以下错误:

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

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

4

3 回答 3

8

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
};
于 2012-11-14T11:27:02.620 回答
1

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

于 2016-01-25T06:56:20.650 回答
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()
于 2012-11-14T11:37:34.890 回答