2012-06-04 63 views
0

唯一項目我有html文件,如下圖所示:如何讓jQuery中

<div id="ultreecurri" style="float:left;"> 
<ul> 

<li id="li1" class="popupul" style="text-align: left;">International</li> 
<li id="li10" class="popupul" style="text-align: left;">Science</li> 
<li id="li332" class="popupul" style="text-align: left;">Physics</li> 
<li id="li2" class="popupul" style="text-align: left;">Africa</li> 
<li id="li3" class="popupul" style="text-align: left;">Asia</li> 
<li id="li5" class="popupul" style="text-align: left;">Caribbean</li> 
<li id="li8" class="popupul" style="text-align: left;">North America</li> 
<li id="li9" class="popupul" style="text-align: left;">South America</li> 
<li id="li1" class="popupul" style="text-align: left;">International</li> 
<li id="li10" class="popupul" style="text-align: left;"> Science</li> 
<li id="li332" class="popupul" style="text-align: left;">Physics</li> 
<li id="li2" class="popupul" style="text-align: left;">Africa</li> 
<li id="li3" class="popupul" style="text-align: left;">Asia</li> 
<li id="li5" class="popupul" style="text-align: left;">Caribbean</li> 
<li id="li8" class="popupul" style="text-align: left;">North America</li> 
<li id="li9" class="popupul" style="text-align: left;">South America</li> 
</ul> 
</div> 

我如何可以根據自己的liids得到的李項獨特的文本。

+1

這HTML格式不正確。 ID不能重複,否則jQuery/js會表現異常。 –

回答

2
var items = [], 
    txt; 
$('#ultreecurri li').each(function() { 
    // Cache the text to avoid retrieving twice the same property 
    txt = $(this).text(); 

    // If the text isn't in the array, add it 
    if ($.inArray(txt, items) === -1) { 
     items.push(txt); 
    } 
}); 
console.log(items);​ // Array of unique values 

演示:http://jsfiddle.net/Ralt/Vz7ev/1/

你會看到, 「科學」 是不一樣的 「科學」。如果您困擾您,您可能需要使用$.trim(可以去掉前導空格和結束空格)。只需更改以下內容:

// Replace this: 
txt = $(this).text(); 
// With this: 
txt = $.trim($(this).text()); 
1

您的標記無效,因爲您不允許將相同的標識提供給多個元素。

話雖如此,如果你的問題是如何從li元素的含量得到唯一值的列表:

var workingObj = {}, 
    uniqueVals = []; 

$("#ultreecurri li").each(function() { 
    var val = $(this).html(); 
    if (!(val in workingObj)){ 
     workingObj[val] = true; 
     uniqueVals.push(val); 
    } 
}); 

// uniqueVals array now contains one of each unique value. 

順便說一句,設置相同的內聯樣式(text-align: left;),使醜陋標記,並且使得正在進行的維護比需要的更麻煩。我會刪除這些並將其添加到您現有的popupul課程中。或者,如果你不能改變的階級出於某種原因添加到您的樣式表:

#ultreecurri li { text-align: left; } 
+0

當然,你不需要兩個變量。如果你正在過濾workingObj,並且只有在var不存在的情況下才加入它,那麼它將只包含每個唯一值中的一個,否。 –

+0

過度工程? :-)只需使用'$ .inArray'就足夠了,不是嗎? :-) –

+0

@LiamBailey - 'workingObj'可以避免在每次迭代'.each()'時在數組上使用'.indexOf()'。據我所知,查找對象中的屬性效率更高,而且這種方式在舊式瀏覽器中不起作用,這些瀏覽器不支持數組上的'.indexOf()'(IE <9)。 – nnnnnn

0

的標記包含了許多重複ID所以,這不是一個有效的標記。相反,我建議你刪除重複的元素,因此在數組上有一個唯一的元素。

這是一個爲此目的的代碼片段。

var list = {}; 
$('li').each(function() { 
    var id = $(this).attr('id'); 
    if (list[id]) 
     $(this).remove(); 
    else 
     list[id] = $(this); 
});