2013-10-08 50 views
3

我在Drupal。嘆。表的輸出爲<caption>,沒有classes/id's,所以我試圖在表格的標題上附加單詞「new」,但只有當該表格包含以「GW6D」開頭的產品時。jquery:選擇<caption>元素

Since這些表是通過視圖動態輸出的,我沒有訪問html中的直接標題標籤來添加類。 (我不能在一個模板中做,因爲那麼每個標題都會有這個類,所以我會試圖找出如何選擇沒有正確產品的表的標題和刪除該類)

I已經嘗試過:

var target = $("table.views-table td:contains('GW6D')").closest("table"); 
$(target).each(function(){ 
    $(this).prepend('<span class="newProdStyling">New</span>'); 
    }); 

它適用於單詞。我可以在該選擇器中放入'tr','td',但如果使用.closest("caption");,我似乎無法定位實際標記。現在,這段代碼會爲每個產品附加一個「新」,所以儘管它現在創建了太多的「新聞」,但我只是想要將它預先標記爲<caption>標籤。

我也堅持jquery 1.3.2,但我還沒有發現任何東西<caption>是版本特定的。

準系統的jsfiddle:http://jsfiddle.net/UbtmJ/4/

+0

你能發佈一些樣本HTML,什麼你試圖將其更改爲? – Barmar

回答

2

<caption>不是td元素的父(這就是爲什麼closest沒有找到它)。但它裏面的<table>所以你必須一旦你達到那個去向下..

var target = $("table.views-table td:contains('GW6D')").closest("table").find('caption'); 
$(target).prepend('<span class="newProdStyling">New</span>'); 
+0

太棒了!這是我的問題,不知道最接近尋找父母......我會接受,當它讓我。再次感謝 –

1

.closest()不「東張西望」的比賽,它遍歷通過在DOM當前元素的祖先樹。 (請參閱the documentation here)。

找到表.closest('table')後,您需要遍歷向下以查找標題。最簡單的功能是.find()

所以,你的目標將是:

var target = $("table.views-table td:contains('GW6D')").closest("table").find("caption"); 

順便說一句,這一切的結果是一個jQuery對象,所以你不需要包裝在$()之後;這將是罰款:

target.each(function(){ 
    $(this).prepend('<span class="newProdStyling">New</span>'); 
}); 

正如本:

$("table.views-table td:contains('GW6D')") 
    .closest("table") 
    .find("caption") 
    .each(function(){ 
     $(this).prepend('<span class="newProdStyling">New</span>'); 
    }); 
+0

感謝您的解釋! –