如果元素的第一个子元素不在文本节点之前,它如何匹配?

我正在尝试匹配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

笔记:

  1. filter函数内的’this’指的是节点
  2. 两个H4都有一个文本节点。 我认为浏览器会在找到空格和换行符的任何地方插入文本节点。 在这种情况下,我们只选择那些不仅仅是空白的。
  3. Node.TEXT_NODE在IE中不可用。 因此使用幻数3。