簡體   English   中英

簡單的jQuery選擇器不起作用

[英]Simple jQuery selector isn't working

我正在嘗試解析此HTML:

<tr id="a">
    <td class="classA">
        <span class="classB">Toronto</span>
    </td>
    <td class="classC">
        <span class="classD">Winnipeg</span>
    </td>
</tr>
<tr id="b">
    <td class="classA">
        <span class="classB">Montreal</span>
    </td>
    <td class="classC">
        <span class="classD">Calgary</span>
    </td>
</tr>

我有一支可變的team 我想找到包含team<span> 然后,我想導航到<tr>並從中提取id

我試過了:

var team = "Toronto";
var id = $("span:contains(" + team + ")").parent().parent().attr('id');

但是它回來時沒有定義。 我知道選擇器是正確的,因為$("span:contains(" + team + ")").attr('class')classB一起classB 所以我不知道我的查詢出了什么問題。 有人可以幫忙嗎?

編輯:這是JSFiddle。

您的html 無效,選擇器正確 ,您需要在table標簽中添加tr以獲得有效的html。 您最好使用closest("tr")而不是.parent().parent()

現場演示

<table>
    <tr id="a">
        <td class="classA"> <span class="classB">Toronto</span>

        </td>
        <td class="classC"> <span class="classD">Winnipeg</span>

        </td>
    </tr>
    <tr id="b">
        <td class="classA"> <span class="classB">Montreal</span>

        </td>
        <td class="classC"> <span class="classD">Calgary</span>

        </td>
    </tr>
</table>

由於瀏覽器自動修復了HTML,因此無法正常工作。 沒有桌子就不可能有一個TR,所以它只是把它扔掉了。 在運行JavaScript時,實際上實際上是DOM的一部分。

將其包裝在<table> ,您的代碼將起作用。 甚至最好將其包裝在<table><tbody>因為瀏覽器仍然會只為一個表為您創建一個tbody,這可能會導致下一步的混亂(如果您查看TR的父級)。

當前,您的HTML標記無效,您需要將<tr>元素包裝在<table>

<table>
    <tr id="a">
        <td class="classA"> <span class="classB">Toronto</span>

        </td>
        <td class="classC"> <span class="classD">Winnipeg</span>

        </td>
    </tr>
    <tr id="b">
        <td class="classA"> <span class="classB">Montreal</span>

        </td>
        <td class="classC"> <span class="classD">Calgary</span>

        </td>
    </tr>
</table>

另外,最好使用.closest().prop()代替.parent().attr()

var id = $("span:contains(" + team + ")").closest('tr').prop('id');

小提琴演示

嘗試:

var id = $("span:contains(" + team + ")").parent('td').parent('tr').attr('id');

您的代碼運行良好。只需將代碼包裝到<table></table>

HTML

<table>
<tr id="a">
    <td class="classA">
        <span class="classB">Toronto</span>
    </td>
    <td class="classC">
        <span class="classD">Winnipeg</span>
    </td>
</tr>
<tr id="b">
    <td class="classA">
        <span class="classB">Montreal</span>
    </td>
    <td class="classC">
        <span class="classD">Calgary</span>
    </td>
</tr>
</table>

腳本

var team = "Toronto";
var id = $("span:contains(" + team + ")").closest('tr').prop('id');
console.log(id)

http://jsfiddle.net/7Eh7L/

最好使用closest()

$("span:contains(" + team + ")").closest('tr').prop('id');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM