2015-11-06 99 views
0

我有一堆使用動態生成ID的div('.program-collector')。這些ID通常不止一個單詞,所以我在我的PHP中使用strtok方法將ID縮減爲原始多字ID字符串的第一個單詞,這很好。用textContent選擇一個元素,然後替換一個元素ID

然而,兩個div的具有相同的第一個字(「代理基礎知識」和「代理高級」),所以我試圖用包含 ID字符串中其標題識別DIV的「代理基礎」,並用新的代碼(「基礎」)替換它的ID。

在我的jQuery,我嘗試這個方法用的textContent屬性...

$('.program-collector').each(function(k,ttl) { 
    if($(ttl).find("h3").textContent =="Acting Basics") { 
     alert("Alert"); 
     $(ttl).attr("id","Basics"); 
    } 
}; 

...但是這不會觸發警報彈出或更改ID,所以東西在我的代碼是關閉。任何人都可以闡明如何改進我的代碼或提供另一種我應該使用的方法的建議嗎?

回答

2

$(ttl).find("h3").textContent應該是$(ttl).find("h3").text()textContent是一個DOM屬性,而不是一個jQuery方法。

也有可能你在元素中有空格。如果它不匹配,嘗試修剪它:

$('.program-collector').each(function(k,ttl) { 
    if($(ttl).find("h3").text().trim() =="Acting Basics") { 
     alert("Alert"); 
     $(ttl).attr("id","Basics"); 
    } 
}; 

你可以在一個單一的通話做到這一點:

$('.program-collector:has(h3:contains("Acting Basics"))').attr('id', 'Basics'); 
+0

感謝Barmar。不過,我仍然得到相同的結果。 –

+0

在比較之前嘗試修剪它,以防文本週圍出現空白。 – Barmar

0

下面是一個簡化版本,它不需要each()功能。

$('.program-collector').find('h3:contains("Acting Basics")').closest('.program-collector').attr("id","Basics"); 

http://jsfiddle.net/bhx36p9f/

+0

這會將ID添加到'h3',而不是'.program-collector'。 – Barmar

+0

更新了代碼以更新.program-collector's id。 – DinoMyte

+0

雖然你的最初嘗試給了我答案中的一行代碼的想法,但它起作用。 – Barmar

相關問題