1

各見出しの次の見出しタグ名とインデックスを JavaScript/jQuery で探しています。たとえば、最初の見出しが h1、2 番目が h2、3 番目が h1 で、2 番目の h2 で関数を実行した場合、2 番目の h1 であるため、タグ名 h1 とインデックス 1 (0 ベース) が取得されます。 . これが私のコードです。奇妙なことに、常に h2 をタグ名として、0 をインデックスとして指定します!

$("h1, h2, h3, h4, h5, h6").each(function(index){
    var nexth = $(this.tagName.toLowerCase() + "~ h1, h2, h3, h4, h5, h6")[0];
    var nexthtagname = nexth.tagName.toLowerCase();
    var nexthindex = $(nexthtagname).index(nexth);
    alert("Tag Name: " + nexthtagname + ", Index: " + nexthindex);
});

ここにいくつかのテストhtmlがあります:

<h1>Header 1</h1>
<p>Test</p>
<h2>Header 1.1</h2>
<p>Test</p>
<h3>Header 1.1.1</h3>
<p>Test</p>
<h3>Header 1.1.2</h3>
<h2>Header 1.2</h2>
<p>Test</p>
<h1>Header 2</h1>
<p>Test</p>
<h4>Header 2.0.0.1</h4>

前もって感謝します!

4

2 に答える 2

2

問題は、セレクターが$("h2 ~ h1, h2 ...")次の要素タイプを取得するために実際に要素自体を使用したいということです。

var nexth = $(this).nextAll("h1, h2, h3, h4, h5, h6").first()[0];

私が知る限り、jQuery には「next of type」のメソッドがありませんが、間違っている可能性があります。次の兄弟がそのフィルターに含まれている必要があるため、使用$(this).next('h1, h2...')は機能しません。 nextAll次のすべての兄弟を調べますが、必要なのは次の兄弟だけです (したがってfirst)。インデックス コードは正しいようです。見る:

http://jsfiddle.net/wTubu/

これにより、最後の要素でエラーが発生することに注意してください。.nextAll長さがあるかどうか、またはnexth未定義でないかどうかを確認するだけです。

于 2012-12-13T20:41:03.063 に答える
0

それほど複雑にしないでください。ドキュメント順に有効な見出しのコレクションがすでにあります。

var headings = $("h1, h2, h3, h4, h5, h6").get();
for (var i=0; i<headings.length-1; i++) {
    var cur = headings[i],
        next = headings[i+1];
     … // get tag name etc
}
于 2012-12-13T21:07:22.917 に答える