2015-11-06 101 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

相关问题