2

画像私はこのようなテーブルを持っています:

<table>
    <tr>
        <td>Adresse IP</td>
        <td class='tdSoap'>10.2.3.4</td>
    </tr>
    <tr>
        <td>Zobi</td>
        <td class='tdSoap'>blabla</td>
    </tr>
    <tr>
        <td>Adresse</td>
        <td class='tdSoap'>NYC</td>
    </tr>
</table>

「Adresse」ではなく「Adresse」でTDを持つTRを選択して、「NYC」値を取得したい。

私はすでにこのコードでやりたいことをしています:

$("table tr:has(td:contains('Adresse'))").not(":contains(Adresse\u00a0IP)").find("td.tdSoap").text();

しかし、私はこの種のコードで多くのことを試みましたが、成功することはありませんでした:

$("table tr:has(td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')) td.tdSoap").text();

PS:「\u00a」はそのhttp://bugs.jquery.com/ticket/3450によるものです

4

2 に答える 2

3

おそらくこれ:

$("table tr td:contains('Adresse')").not(':contains(Adresse\u00a0IP)').next('.tdSoap').text();

なぜこれが機能しないのですか:(あなたが持っているもの)

$("table tr:has(td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')) td.tdSoap").text();

jQueryはセレクターで右から左を使用するので、次のように考えてください。

  1. すべてのtd.tdSoapを検索
  2. 'Adresse\u00a0IP'を持たないものを見つけてください-td.tdSoap内には何もありません
  3. 'Adresse'を持っているものを見つけてください-まあ、td.tdSoapの中には何もありません
  4. 今、それらを組み合わせます-それでもそのtd.tdSoap内には何もないので、何も選択されません。

さて、これは「持っている」を取り出して次を追加することでも機能します:

$("table tr td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')").next("td.tdSoap").addClass('myfirst');

ただし、いくつかのパフォーマンスメトリックを実行し、これらのどれが高速であるかを確認します。

$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresse\u00a0IP")').next('.tdSoap').text();
$('table').find('.tdSoap').prev(':contains(Adresse)').not(':contains(Adresse\u00a0IP)').next().text();
$("table tr td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')").next('td.tdSoap').text();
$("table tr:has(td:contains('Adresse'))").not(":contains(Adresse\u00a0IP)").find("td.tdSoap").text();
$("table tr td:contains('Adresse')").not(':contains(Adresse\u00a0IP)').next('.tdSoap').text();

注:これらの「グループ」がさらにある場合、それらすべてのテキストを取得します。すべてが必要かどうかはわかりませんが、それがあなたの持っているものです。

編集:これは、&nbsp

$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresse\u00a0IP")').not(':contains("Adresse IP")').next('.tdSoap').text();
于 2013-02-14T14:12:20.333 に答える
0

HTMLを変更できない場合は、次の方法でうまくいくはずです。

$('table tr:has(td:contains("Adresse"):not(:contains("Adresse IP"))) td.tdSoap').text()

それ以外の場合は、コメントでMahmoodが言っていることを試して、選択するための具体的なものを与えることをお勧めします。

于 2013-02-14T12:49:55.507 に答える