2009-07-02 6 views
45

하여 특정 속성이없는 요소가 나는 특정 속성을 가진 요소를 얻는 방법을 알 수 있습니까? 시도해보십시오어떻게 jQuery를

$("#para :not([attr_all])") 

하지만 작동하지 않습니다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

저를 예를 들어 보겠습니다 :

<div id="para"> 
    <input name="fname" optional="1"> 
    <input name="lname"> 
    <input name="email"> 
</div> 

jQuery를 :

$("#para [optional]") // give me the fname element 
$("#para :not([optional])") //give me the fname, lname, email (fname should not appear here) 

답변

18

우선 :

$('p').filter(function(){ 
    return !$(this).attr('attr_all'); 
}); 

그러나 p:not([attr_all]) 일, 그래서 뭔가 다른 코드에서 벌어지고 생각해야한다.

+1

마침내 해결했습니다. 문제는 그것이 코드의 다른 부분에 의해 발생했기 때문에 이것을 답으로 표시 할 것입니다. – Billy

+5

더 높은 upvotes를 가진 응답을 아래에보십시오. – WildService

5

$("#para [attr!=val]")를 사용해보십시오.

귀하의 :not이 실제로 작동해야하지만, 다른 어떤 일이 벌어지고있는 것으로 의심됩니다.

속성 선택자의 전체 목록은 jQuery Selectors docs을 참조하십시오. (아마도 하위 최적) 내 마음에 오는

+0

작동하지 않습니다. – Billy

+0

네, 문제가 컨텍스트에있는 것 같아요.이 선택기가 아닙니다. – chaos

+0

+1. 이 선택기는 JQuery와 관련이 있습니다. CSS 속성 선택기로 정의되지 않았으므로 CSS를 통해 스타일을 지정하기 위해 요소를 타겟팅하는 데 사용할 수 없습니다. http://www.w3.org/TR/CSS2/selector.html#attribute-selectors – PatrikAkerstrand

102

코드 예제가 사용중인 코드와 정확히 일치하면 문제가 잘못된 공간이라고 생각합니다. 당신이 거기에 공간을두면

$("#para :not([attr_all])") 

그것은 후손 #para을 선택

$("#para:not([attr_all])") 

해야한다.

+7

이것은 올바른 대답입니다 –

+3

이것은 올바른 대답입니다, 위로 위로 –

+9

하지만 원래 질문에서 OP **는 자손을 선택하려고합니다! –

7

더 빠른 방법은 ID가 para 인 요소를 모두 가져 오는 것입니다 (둘 이상의 요소가있는 경우 잘못된 HTML이며 클래스를 대신 사용하는 것이 좋습니다). 필터를 사용하거나 HTML이 구성되어) 방법에만 너무 같은 속성이없는 요소를 얻을 수 있습니다 :

$('#para').filter(':not([attr_all])'); 

당신은 속성없는 사람들을 얻기 위해 요소의 작은 부분 집합 통해 반복되기 때문에 jQuery를 훨씬 덜 작업을 할 데 이렇게을 . 예를 들어 $("#para :not([attr_all])")과 같은 단일 selector 문으로 jQuery가 속성없이 모든 요소를 ​​가져온 다음 ID가 para 인 요소에 대해 필터합니다.

1

프랭크 데로 사의 대답은 옳았지만 OP가 자손을 찾고 싶어하기 때문에 조금 벗어났습니다. 직접 해보니 그것이 작동하는 것처럼 보이지만 실행중인 것은 ':'연산자가 직접적으로 자손으로 사용되는 것을 좋아하지 않을 수도 있습니다. 사용해보기

$("#para input:not([optional])") 

댓글을 달았으나 아직 할 수는 없습니다.

+1

또는 좀 더 광범위한 선택기 :'$ ("# para * : not ([optional])")' – Gideon