0

私は以下のようなHTMLスニペットを持っています:

<tr><td></br></td></tr>
<tr title="title"><td></td><td>凝固検査専用容器</td></tr>
<tr id='map_6011' />
<tr id='map_6012' />
<tr id='map_6010' />
<tr id='map_6184' />
<tr id='map_6336' />    
<tr><td></br></td></tr>

<tr title="title"><td></td><td>血糖専用容器(NaF入り)</td></tr>
<tr id='map_2055' />
<tr id='map_3471' />    
<tr><td></br></td></tr>

<tr title="title"><td></td><td>アンモニア専用容器&lt;/td></tr>
<tr id='map_2142' />

まず、タイトルが「title」の各TRタグを選択し、次にその特定のTRタグの兄弟を最初に選択します(つまり、「map_xxxx」のようなIDを持つ次のTR)。

私はこのようなJavaScriptを持っています:

var lblTRs=$("tr[title=title]");
for(var i=0;i<lblTRs.length;i++){
    var obj=lblTRs[i];
    var firstTRSibling=obj.nextSibling;
    alert(firstTRSibling); //this gives [object Text]
}

ただし、実際のTR兄弟は提供されません。alert()は[オブジェクトテキスト]を提供します。

私はここで何が間違っているのですか?

4

5 に答える 5

4

このようにしてみてください:

var firstTRSibling;
while((firstTRSibling=obj.nextSibling).nodeType !== 3){
                                               //   ^-----indicates TEXT_NODE
    obj=obj.nextSibling;
}
alert(firstTRSibling);

DOM要素の間に余分な空白文字があり、それらはテキストノードとして扱われます。

于 2012-07-09T08:09:12.000 に答える
1

私はあなたが簡単に使うことができると思いますnext

$("tr[title='title']").each(function() {
    var element = $(this).next();
});

ところで、<tr>終了タグ(つまり</tr>)が必要であり、指定された数の<td></td>タグも含まれている必要があります。

于 2012-07-09T08:13:39.490 に答える
1

問題は、要素の各ペア間の空白が<tr>DOMのテキストノードとして表されることです。ただし、これを非常に簡単に処理できるテーブル関連要素のプロパティはほとんど知られていないようです。特にこの場合、要素のrowsプロパティと要素のプロパティ。と呼ばれる変数に要素が格納されていると仮定すると、必要なのは次のとおりです。<table>rowIndex<tr><tr>tr

tr.parentNode.rows[tr.rowIndex + 1];

これは、IE 4に戻るすべての主要なブラウザーで機能し、DOM標準の一部です。また、jQueryや別のライブラリを使用するよりも高速で互換性があります。

于 2012-07-09T08:22:25.690 に答える
0

すでにjQueryを使用しているので、jQueryに組み込まれているnext関数を使用することをお勧めします。

それは次のようなものかもしれませんvar lblTRs=$("tr[title=title]").next("tr");

于 2012-07-09T08:14:29.173 に答える
0

OK、使用する必要があります

var firstTRSibling=obj.nextSibling.nextSibling;

しかし、なぜ?_

于 2012-07-09T08:08:30.583 に答える