如果元素的第一个子元素不在文本节点之前,它如何匹配?
我正在尝试匹配div的h4(使用jQuery),以便我可以删除它的上边距。 但是,我只想匹配h4,如果它上面没有文字。 例如,匹配这个:
Header
...
但不是这个:
Blah blah blah. Header
...
我在jQuery中提出的最佳代码是:
$("div h4:first-child")
但不幸的是,这与上述情况相符。 反正有没有指定你希望它是绝对的第一个元素,之前没有文本节点?
Header
... Blah blah blah. Header
...
然后你可以使用以下。
$('div').each(function() { var me = this; if ($(me).html().toUpperCase().indexOf("") == 0){ //check to see if the inner html starts with an h4 tag $(me).children('h4')... //do what you need to do to the header } });
$("div h4") .filter(function() { var prev = this.previousSibling; return (!prev || prev.nodeType !== 3 || (prev.nodeType == 3 && prev.nodeValue.match(/^\s*$/))); })
编辑:修复它。 适用于Firefox,IE8
笔记:
- filter函数内的’this’指的是节点
- 两个H4都有一个文本节点。 我认为浏览器会在找到空格和换行符的任何地方插入文本节点。 在这种情况下,我们只选择那些不仅仅是空白的。
-
Node.TEXT_NODE
在IE中不可用。 因此使用幻数3。