[jquery] 속성별로 요소 선택

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

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

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



답변

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

$(":checkbox[myattr]")


답변

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
}


답변

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

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

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

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


답변

이것은 작동합니다 :

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


답변

자바 스크립트에서 …

null == undefined

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

typeof o == "undefined"

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

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


답변

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


답변

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