4

上マージンを削除できるように、(jQuery を使用して) div の h4 を一致させようとしています。ただし、h4の上にテキストがない場合にのみ一致させたいと思います。たとえば、次のように一致します。

<div>
  <h4>Header</h4>
  ...
</div>

しかし、これではありません:

<div>
  Blah blah blah.
  <h4>Header</h4>
  ...
</div>

jQuery で思いつく最高のコードは次のとおりです。

$("div h4:first-child")

しかし、残念ながら、それは上記の両方のケースに一致します。その前にテキストノードがなく、絶対的な最初の要素になるように指定する方法はありますか?

4

2 に答える 2

3
<div>
    <h4>Header</h4>
    ...
</div>

<div>
    Blah blah blah.
    <h4>Header</h4>
    ...
</div>

次に、以下を使用できます。

$('div').each(function() {
    var me = this;
    if ($(me).html().toUpperCase().indexOf("<H4>") == 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
    }
});
于 2009-02-18T18:05:31.193 に答える
3
$("div h4")
    .filter(function() {
    var prev = this.previousSibling;
        return (!prev 
            || prev.nodeType !== 3
            || (prev.nodeType == 3 && prev.nodeValue.match(/^\s*$/)));
    })

編集:修正しました。Firefox、IE8で動作します

ノート:

  1. フィルタ関数内の「this」はノードを参照します
  2. 両方のH4の前にテキストノードがあります。ブラウザは、空白や改行が見つかった場所にテキストノードを挿入すると思います。この場合、空白のみではないもののみを選択します。
  3. Node.TEXT_NODEIEでは使用できません。したがって、魔法の数3を使用します。
于 2009-02-18T18:10:56.050 に答える