我有以下代码似乎在除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
任何人都可以帮我解决这个问题,或者任何人都可以想到一个更好的方法来获得相同的结果。感谢。
答案 0 :(得分:8)
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
};
答案 1 :(得分:1)
对于IE8及以下版本节点不起作用,将node
更改为window
对我有效。
答案 2 :(得分: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()