속성별로 요소 선택


253

생성 된 ID가있는 확인란 모음이 있으며 그중 일부에는 추가 속성이 있습니다. JQuery를 사용하여 요소에 특정 속성이 있는지 확인할 수 있습니까? 예를 들어 다음 요소에 "myattr"속성이 있는지 확인할 수 있습니까? 속성 값은 다를 수 있습니다.

<input type="checkbox" id="A" myattr="val_attr">A</input>

예를 들어 하나씩 확인하지 않고이 속성을 가진 모든 확인란의 컬렉션을 얻는 방법은 무엇입니까? 이게 가능해?


2
따로, <input />은 내부에 내용을 포함하지 않는 빈 태그입니다. 아마도 당신이 myatttr을 가지고 있는지 확인하는 것에 관심이 없을 것입니다.
ScottE


이미 컬렉션을 가지고 있고 특정 속성을 가진 요소 만 걸러 내려면 – 그냥하세요 –$filtered = $collection.filter('[attribute_name]');
jave.web

답변:


190

당신은 그들을 선택할 수 있습니까? 그렇다면, 예 :

$(":checkbox[myattr]")

4
예를 들어 if 문에서 존재 여부를 테스트하는 경우 아마도 더 정확하고 신뢰할 수 있습니다. if ($ ( ": checkbox [myattr]"). length ()> 0) ...
rinogo

14
@rinogo : 실제로 필요한 것은 if ($ ( ": checkbox [myattr]"). length)입니다. 길이 뒤의 ()는 필요하지 않으며> 0, 0도 같지 않으며 엄격한 동등성 (값 및 유형)이 필요하지 않은 동등성 테스트에서 false로 평가되지 않습니다.
bmarti44

1
: td [myattr]와 같은 것을 시도하면 js 오류가 발생합니다. 이 기능은 특히 확인란을 타겟팅하는 것 같습니다.
fooledbyprimes

6
콜론은 유형 attr에 따라 의사 클래스를 선택합니다. td에 동일한 것을 적용하려면 콜론을 생략하십시오.
dhochee

또는 속성이없는 모든 링크를 찾는 것과 같이 속성이없는 것을 확인하려는 경우 href. $("#myBox").find('a').filter(':not([href])')
timbrown

368
if ($('#A').attr('myattr')) {
    // attribute exists
} else {
    // attribute does not exist
}

편집하다:

위의 내용은 존재 하는 경우 else-branch에 속 myattr하지만 빈 문자열 또는 "0"입니다. 그것이 문제라면 명시 적으로 테스트해야합니다 undefined.

if ($('#A').attr('myattr') !== undefined) {
    // attribute exists
} else {
    // attribute does not exist
}

3
좋은 대답이 아닙니다. "undefined"는 Javascript의 키워드가 아닙니다. constc.blogspot.com/2008/07/…
mhenry1384

16
맞습니다 ... 그러나 재정의 undefined는 가장 중요한 경우로 간주되며 위의 비교는 모든 경우의 99 %에서 작동합니다.
Stefan Gehrig

6
속성에 빈 문자열이 있으면 작동하지 않습니다. 예를 들어, myattr = ''
mythicalprogrammer

3
@ mhenry-그렇다면 오류가 발생했을 것입니다. :) 프로젝트를 저와 함께 또는 저와 함께 작성하는 경우 오류를 수정해야합니다. 그것이 오픈 소스 패키지라면, (많은 사용자들과 함께) 나는 그것이 잘못 코딩 된 근거에 따라 그것을 사용하지 않을 것입니다. 변경하지 않으면 다른 사람은 결국 오류없이 버전을 포크하고 사람들은 대신 그것을 사용하고 누군가가 좋은 아이디어를 가진 패키지를 만들 때 전에 여러 번 발생한 것처럼 자신의 프로젝트를 잃게됩니다 나쁜 구현. 어느 쪽이든 그것은 당신에게 코딩 연습에 대한 교훈을 가르쳐 줄 것입니다 :)
Jimbo Jonny

8
if (typeof $ ( '# A'). attr ( 'myattr')! == 'undefined')
James Westgate

166

질문이 나온 지 오랜 시간이 걸렸지 만 수표가 다음과 같이 더 명확하다는 것을 알았습니다.

if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(이 사이트 에서 찾을 수 있습니다 )

에 대한 설명서 여기 에서 찾을 수 있습니다


W3C에 따르면 부울 속성은 속성의 유무에 따라 정의됩니다. jQuery는 속성 값을 조작하기 위해 .attr () 메소드를 제공합니다. 그러나 값이없는 속성을 어떻게 추가합니까? 속성 존재 여부를 테스트하기 위해 제공하는 방법은 jQuery 설명서 (1.8.2)에 설명되어 있지 않습니다. jQuery로 속성을 추가하는 방법을 알고 있습니까?
chmike

@chmike 속성을 추가하려면 다음과 같이하십시오 : $ ( "# A"). prop ( "myNewAttribute", someValue); 문자열, 숫자, 빈 문자열, 참 / 거짓 중 원하는 값을 someValue로 지정할 수 있습니다.
Jonathan Bergeron

값이없는 속성과 같지 않은 할당 된 값이있는 속성을 추가합니다.
chmike

5
나는 이것이 jQuery를 사용하는 가장 좋은 대답이라는 것에 동의합니다-매우 명확하고 간결합니다. 왜 jQuery에 hasAttribute () 함수가 없는지 궁금해하고 네이티브 자바 스크립트에 이미있는 것이 있습니다. 모든 HTML Dom 요소에는 hasAttribute ( 'attributeName') 메소드가 있습니다. 그래서 당신은 할 수 있습니다 : $ ( '# A') [0] .hasAttribute ( 'myattr') @chmike-jQuery 함수를 사용하여 빈 속성을 추가 할 수는 없지만 HTML Dom 요소로 할 수 있다고 생각합니다 $ ( "# A") [0] .setAttributeNode (document.createAttribute ( "myNewAttribute"));
Daniel Howard

1
이 답변이 마음에 들지만 주석없이 값을 추가하는 방법을 묻는 주석에 대해서는 혼란 스럽습니다. 이들은 질문이나 답변과 관련이 없습니다.
goodeye

9

이것은 작동합니다 :

$('#A')[0].hasAttribute('myattr');


@RetroCoder, 귀하의 링크에 대한 요점은 무엇입니까? 이 테스트는 특히 좋은 경우가 있습니다. 특히 $(this).<something>여기에서 this.hasAttribute('...')직접 할 수있을 때 (구식 브라우저에 신경 쓰지 않아도 됨) 자주 사용하기 때문에
Alexis Wilke

8

자바 스크립트에서 ...

null == undefined

... true*를 반환합니다 . 이 사이의 차이점 =====. 또한 이름 undefined을 정의 할 수 있으므로 (예 : 키워드 null가 아님) 다른 방법을 확인하는 것이 좋습니다. 가장 신뢰할 수있는 방법은 아마도 typeof연산자 의 반환 값을 비교하는 것입니다 .

typeof o == "undefined"

그럼에도 불구 하고이 경우 null과 비교하면 작동합니다.

* undefined실제로는 정의되지 않은 것으로 가정 합니다.


정의되지 않음은 JavaScript에서 예약 된 키워드가 아닙니다. jQuery에서는 이름이 "var"생성자로 구성되어 있고 값이 지정되지 않기 때문에 이름을 정확하게 삭제할 수 있습니다. 실제로 매직 라이브러리 코드의 맨 위에 "var undefined;"라는 줄이 있습니다. 이 방법으로 정의되지 않은 변수는 jQuery 범위에서 해당 이름으로 정의됩니다. 그러나 "var unnamed;"를 입력하여 모두 같은 이름을 "unnamed"로 지정할 수 있습니다.
Emanuele Del Grande

1
이것은 속성을 확인하지 않고 자바 스크립트 객체의 속성을 확인하여 왜 6 개의 공감대를 가지고 있습니까?
ncubica

5

$("input[attr]").length 더 나은 옵션이 될 수 있습니다.


4

"typeof", jQuery ".is"및 ".filter"를 사용하여 몇 가지 아이디어를 얻었으므로 빠른 비교를 게시 할 것이라고 생각했습니다. typeof가 가장 적합한 것으로 보입니다. 다른 것들도 작동하지만이 노력으로 jq 라이브러리를 호출 할 때 명확한 성능 차이가있는 것으로 보입니다.


2
if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}

1
값이없는 속성을 추가 할 수 있기 때문에 아마도 작동하지 않을 것입니다. 이 경우 원하는 동작이 true를 리턴 할 수 있지만 속성이 설정되지만이 조건이 전달됩니다. PHP와 비슷 isset()하거나 js $("#element").attr('my_attr') === false에서
ulkas

2

같이 이 게시물 사용 .is및 속성 선택 [], 당신은 쉽게 함수 (또는 프로토 타입)을 추가 할 수 있습니다 :

function hasAttr($sel,attr) {
    return $sel.is('['+attr+']');
}


1

간단히:

$('input[name*="value"]')

추가 정보 : 공식 문서


1
유효한 문자열이 아닌 큰 따옴표로 정의 된 문자열 내 이스케이프되지 않은 큰 따옴표. 불행히도 편집은 6 문자 이상을 변경해야하기 때문에 편집 할 수 없으므로 변경해야합니다.
Jimbo Jonny

0

속성이있는 모든 요소를 ​​선택 $('[someAttribute]')하거나 $('input[someAttribute]')클릭 핸들러와 같은 객체에서 부울 검사를 수행하는 함수를 사용할 수도 있습니다.

if(! this.hasAttribute('myattr') ) { ...


0

위에서 설명한대로 의도 된 동작으로 npm 패키지를 만들었습니다.

링크 [NPM][github에]

사용법은 매우 간단합니다. 예를 들면 다음과 같습니다.

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

true를 반환합니다.

낙타와 함께 작동합니다.


0

특정 속성을 가진 요소를 선택하려면 위의 답변을 참조하십시오.

주어진 jQuery 요소에 특정 속성이 있는지 확인하려면 trueajQuery 컬렉션의 첫 번째 요소 에이 속성이 있는지 반환하는 작은 플러그인을 사용하고 있습니다 .

/** hasAttr
 ** helper plugin returning boolean if the first element of the collection has a certain attribute
 **/
$.fn.hasAttr = function(attr) {
   return 0 < this.length
       && 'undefined' !== typeof attr
       && undefined !== attr
       && this[0].hasAttribute(attr)
}

-5

JQuery는 속성을 문자열로 반환합니다. 따라서 해당 문자열의 길이를 확인하여 설정되어 있는지 확인할 수 있습니다.

if ($("input#A").attr("myattr").length == 0)
 return null;
else
 return $("input#A").attr("myattr");

그래서 1 년이 지났다는 것을 알고 있으며 오래 전에 해결해야했습니다. 어떤 부분이 작동하지 않는지 궁금합니다. 당신이 그들을 선택하려고한다는 것을 알고 있다면 위의 코드를주지 않았을 것입니다. 개별적으로 확인하고 싶다고 생각했습니다. JQuery는 실제로 속성을 문자열로 반환하므로 다른 문자열과 마찬가지로 해당 문자열의 길이를 확인할 수 있습니다. 선택기와 속성이 올바른 한 특정 입력에 해당 속성이 있는지 테스트 할 수 있어야합니다. 어쨌든, 나는 사람들이 원리를 할인하지 않기를 원했습니다.
zach

6
$ ( "input # A"). attr ( "myattr")가 문자열 대신 undefined를 반환하고 undefined.length가 실패하는 경우 속성이 존재하지 않으면 실패합니다.
Rune FS

빈 속성과 컨텐츠가있는 속성 만 감지하고 존재하지 않는 속성에서는 실패합니다. 원래 질문은 속성의 존재를 감지하는 것에 관한 것이 었으며, 이는 질문에 대한 답변으로 실패했습니다.
Jimbo Jonny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.