2014-04-15 33 views
1

有html代碼:
如何選擇嵌套表中不包含某些元素的標籤?

<body> 
<table> 
    <tr> 
     <td>A</td> 
     <td> 
      <table> 
       <tr> 
        <td>B</td> 
        <td>...</td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
    <tr> 
     <td>C</td> 
     <td> 
      <table> 
       <tr> 
        <td>D</td> 
        <td>...</td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
</table> 
<button id="click">click</button> 
</body> 


我想要的是得到上面的html代碼文本AC。事實上,我嘗試了一些方法。我的想法是選擇不具有table的下降標記元素的td標記元素。不過,我只能得到這些td元素的下降標記元素table,jquery代碼如下。
您可以嘗試在jsddle上運行。

$("#click").on("click", function() { 
var ss = $("td:has(table)"); 
$.each(ss, function (index, value) { 
     alert(index + $(this).html()); 
    }); 
}); 

感謝您的任何幫助。

回答

2

試試這個:

$("#click").on("click", function() { 
    $("td").each(function(index){ 
     if(($(this).closest('table').parent('td').length == 0) && ($(this).find('table').length == 0)) 
      alert(index + $(this).html()); 
    }); 
}); 

DEMO

+0

感謝您提前回答,但兩種方法沒有得到我想要的,文本'A'和'C'。你可以在[jsfiddle](http://jsfiddle.net/zCvTT/6/)中試用它們。 –

+0

編輯答案與工作演示@ ShaoweiLing –

+0

謝謝,它的工作原理。 –

0

我的想法是選擇沒有表的血統標籤元素td標籤的元素。

然後使用not選擇:

$("#click").on("click", function() { 
var ss = $("td:not(:has(table))"); 
$.each(ss, function (index, value) { 
     alert(index + $(this).html()); 
    }); 
}); 
+0

感謝您的回答。是的,我嘗試過這種方法,但沒有得到我想要的。我只能走到有'td'包含'table'的下降標籤的地方。你可以試試[jsfiddle](http://jsfiddle.net/zCvTT/6/)來編輯和在線運行。 –

+0

這不是你的意思嗎? http://jsfiddle.net/zCvTT/9/ –

+0

是的,我只想得到文字'A'和'C'而不是'td'中的所有文本。你可以試試[Demo](http://jsfiddle.net/zCvTT/8/),它只顯示'A'和'C'。 –

0

我還找到另一種解決問題的辦法,這可能是更容易理解爲一個像我的新手。雖然html部分沒有顯示標籤tbody,但確實存在。我檢查並顯示了table的正文。然後在第一個table中選擇每個tr的第一個td。 JavaScript代碼如下。

$("#click").on("click", function() { 
    $("#message").text($("table").html()); 
    var trs = $("tbody:first > tr"); 
    $.each(trs, function (index, value) { 
    var td = $(this).find("td:first"); 
    alert(td.text()); 
    }); 
});