部分匹配要獲得與「ELEC ...」開頭的所有<td>
元素的文字,我做的 -對jQuery選擇
$('td.id').each(function(){
if ($(this).text().indexOf('ELEC') == 0) {}
});
有沒有更簡單的方式來做到這一點,像$('td.id:contains("ELEC*")')
?
部分匹配要獲得與「ELEC ...」開頭的所有<td>
元素的文字,我做的 -對jQuery選擇
$('td.id').each(function(){
if ($(this).text().indexOf('ELEC') == 0) {}
});
有沒有更簡單的方式來做到這一點,像$('td.id:contains("ELEC*")')
?
看起來這正是你如何做到這一點(我刪除了通配符星號,因爲它沒有必要的。):
$('td.id:contains("ELEC")')
啊,我錯過了「開始」的問題上的壓制。 – 2012-04-20 20:16:48
問題不明確 - 它詢問「開始於」,然後顯示實現「contains」的示例代碼。 – 2012-04-20 20:17:10
若要僅獲取與ELEC開始元素,使用.filter
方法。
$("td.id").filter(function(){
return /^ELEC/.test($(this).text());
});
或略微更有效
var $collection = $("td.id");
$collection.filter(function(i){
return /^ELEC/.test($collection.eq(i).text());
});
yehaww測試方法 – Kristian 2012-04-20 20:21:01
爲什麼這比OP使用的'.indexOf(「Elec」)== 0'好?在所有情況下.indexOf比使用正則表達式更快。 – jfriend00 2012-04-20 20:33:36
更好,因爲這個實際上創建了一個可以使用的元素集合,而不是單獨在每個元素上運行代碼。例如,對於我的示例,您可以執行'$ collection.addClass(「foobar」)'。使用他的原始代碼,他將在if語句中執行'$(this).addClass('foobar')'。 – 2012-04-20 20:35:31
看來,如果我們結合最好的幾個不同的建議,我們希望得到的東西更快,因爲正則表達式是不是真的叫這裏:
$("td.id").filter(function() {
return ($(this).text().substr(0, 4) == "Elec");
}).whateverMethodYouWant();
還是有點快,使用較少的jQuery:
$("td.id").filter(function() {
return ((this.textContent || this.innerText).substr(0, 4) == "Elec");
}).whateverMethodYouWant();
您編寫的代碼不是查找其文本以「ELEC」開頭的元素;它正在尋找其文本包含「ELEC」的元素。你想要什麼? – 2012-04-20 20:16:41
潛在的重複,請參閱[這個問題](http://stackoverflow.com/questions/1430290/jquery-select-based-on-text) – IronicMuffin 2012-04-20 20:18:20