2012-04-20 63 views
0

部分匹配要獲得與「ELEC ...」開頭的所有<td>元素的文字,我做的 -對jQuery選擇

$('td.id').each(function(){ 
    if ($(this).text().indexOf('ELEC') == 0) {} 
}); 

有沒有更簡單的方式來做到這一點,像$('td.id:contains("ELEC*")')

+0

您編寫的代碼不是查找其文本以「ELEC」開頭的元素;它正在尋找其文本包含「ELEC」的元素。你想要什麼? – 2012-04-20 20:16:41

+0

潛在的重複,請參閱[這個問題](http://stackoverflow.com/questions/1430290/jquery-select-based-on-text) – IronicMuffin 2012-04-20 20:18:20

回答

4

看起來這正是你如何做到這一點(我刪除了通配符星號,因爲它沒有必要的。):

$('td.id:contains("ELEC")') 

http://api.jquery.com/contains-selector/

+0

啊,我錯過了「開始」的問題上的壓制。 – 2012-04-20 20:16:48

+1

問題不明確 - 它詢問「開始於」,然後顯示實現「contains」的示例代碼。 – 2012-04-20 20:17:10

5

若要僅獲取與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()); 
}); 
+0

yehaww測試方法 – Kristian 2012-04-20 20:21:01

+0

爲什麼這比OP使用的'.indexOf(「Elec」)== 0'好?在所有情況下.indexOf比使用正則表達式更快。 – jfriend00 2012-04-20 20:33:36

+0

更好,因爲這個實際上創建了一個可以使用的元素集合,而不是單獨在每個元素上運行代碼。例如,對於我的示例,您可以執行'$ collection.addClass(「foobar」)'。使用他的原始代碼,他將在if語句中執行'$(this).addClass('foobar')'。 – 2012-04-20 20:35:31

0

看來,如果我們結合最好的幾個不同的建議,我們希望得到的東西更快,因爲正則表達式是不是真的叫這裏:

$("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();