2013-03-03 35 views
4

我不明白爲什麼ATTR()被調用僅一次,jQuery的ATTR()工作第一要素只有

我的HTML是

<table id="myTable"> 
    <tbody> 
     <tr> 
      <td>...</td> 
      <td>...</td> 
      <td> 
       <abbr title='first'>Demo1</abbr> 
      </td> 
     </tr> 
     <tr> 
      <td>...</td> 
      <td>...</td> 
      <td> 
       <abbr title='second'>Demo2</abbr> 
      </td> 
     </tr> 
     . 
     . 
     . 
    </tbody> 
</table> 

現在我想「稱號」所有abbr這樣寫下面的查詢

$(document).ready(function() { 
    console.log($('#myTable tr td:nth-child(3) abbr').attr("title")); 
} 

所以,它應該返回我

first 
second 
. 
. 
. 

,但產量只有"first"

但如果寫

var oRows = $('#myTable tbody tr'); 
$.each(oRows, function (i) { 
    console.log($(this).children('td:nth-child(5)').children().attr("title")); 
}); 

然後我得到正確的輸出。但我不認爲這是一個正確的方法,所以任何機構都可以告訴我我錯在哪裏。

而且我看了this答案,但是還是我不清楚

謝謝

+0

取代':第n個孩子(3)'我想你需要':EQ(3)'。 – 2013-03-03 08:35:23

回答

4

.attr()返回第一個元素的屬性。如果你希望所有的匹配元素的屬性,使用map

var titles = $('#myTable tr td:eq(3) abbr').map(function() { 
    return $(this).attr('title'); // or just `return this.title` 
}).get(); 
+0

我標記了一個問題(http://stackoverflow.com/questions/38446549/getting-clicked-class-data-attribute?noredirect=1#comment64298580_38446549)作爲這一個的重複 - 儘管其他問題是指「數據( )',而不是'attr()',方法 - 你是否願意更新你的答案來解釋其他getter方法也是如此,比如'text()','data()','html ()'等等? (我會編輯自己,但感覺太像是選擇了你的答案。) – 2016-07-18 21:57:45

0

這是一個非常簡單的方法。從表myTable中獲取所有的縮寫元素並給出它們的標題。

http://jsfiddle.net/cngpd/

$("abbr", $("#myTable")).each(function() { 
    console.log($(this).attr('title')); 
})