2011-11-29 3 views
0

저는 jQuery를 처음 사용하고 새로운 <li> 항목을 목록에 삽입하려고합니다. 그러나이 항목이 이미 존재하지 않는 경우에만 항목을 삽입하려고합니다. 예 :추가하기 전에 기존 "li"항목을 어떻게 확인할 수 있습니까?

<ul id="myList"> 
     <li>Item 1</li> 
     <li>Item 2</li> 
</ul> 

즉, "항목 7"은 삽입해야하지만 "항목 1"은 삽입해야합니다. 미안 다음과 같은 문장을 통해 미쳐가는 : 코드의

  1. var ListItems = $('#myList li').find('Something');

  2. var ListItems = $('#myList li').html() == 'something';

  3. var exist = $('#myList li').each(){ 
        if($(this).html == 'something') 
         return false; 
    }); 
    

이 조각 <li> 항목이 존재하는 경우에만있다가,하지로 확인 목록에 삽입하십시오. 나는이 선택이 미쳤다고 생각하고 있지만 나는 배우려고 노력하고있다.

올바른 방법은 무엇입니까? 조언이나 제안이 있으십니까?

답변

3

편집 이것은 하나의 요소의 하나를 확인하고 내부에 포함 된 텍스트가 정확히 텍스트 제공 일치해야 오탐 (false positive)

을 방지 할 수 있습니다.

var itemName = 'Item 2'; 
var itemFound = false; 

$('#myList li').each(function() { 

    if ($(this).text() === itemName) 
    { 
     itemFound = true; 
    } 

}); 

if (itemFound == true) 
{ 
    alert('item already present'); 
} 
else 
{ 
    alert('item not present'); 
    // add item here 
} 

check example here

+0

"Item"또는 "ite"와 같은 항목을 체크하면 목록에 "Item 1"과 같은 항목이 포함 된 경우 : 이미 존재합니다. 가장 엄격한 비교를위한 조언은 무엇입니까? – Marcos

+0

위양성을 방지하기위한 솔루션으로 편집되었습니다. –

+0

감사합니다. sososo 많이, 지금 바로 작동 :) 내 평판이 낮기 때문에 투표를 할 수 없습니다 : P – Marcos

2

이 시도 :

if(!$('#myList li:contains("Text here")').length) { 
    // Insert your new li 
} 

그것은 Text here을 포함하는 모든 li 요소를 찾기 위해 :contains 선택기를 사용합니다.

여기서 jQuery는 배열을 반환하므로 .length을 사용할 수 있습니다. 리턴 된 길이가 0이면 주어진 텍스트를 포함하는 기존 요소가 없으므로 새로운 li을 삽입합니다.

+0

jQuery를 기술적으로는 배열을 반환되지 그것도 .length' '속성을 가진 개체의 jQuery 복귀있다. – Blazemonger

+0

와우, 너무 쉬워!. 훌륭하게 작동합니다. 나는 매일 매일 배울 수있어서 행복하다. 고마워. – Marcos

+0

정확히 텍스트가 아닌 텍스트를 포함하는 요소와 일치하므로 위양성에 취약합니다. 예를 들어 "항목 2"와 "항목 23"을 추가하려고하면 거짓 긍정을 반환합니다. – phloopy

관련 문제