특정 속성이 설정된 요소에만 querySelectorAll을 사용하는 방법은 무엇입니까?


124

나는 사용하려고 document.querySelectorAllvalue속성이 설정된 모든 확인란 .

페이지에없는 다른 확인란이 있습니다. value 설정 각 확인란의 값이 다릅니다. 하지만 ID와 이름은 고유하지 않습니다.

예: <input type="checkbox" id="c2" name="c2" value="DE039230952"/>

값이 설정된 확인란 만 선택하려면 어떻게합니까?


1
여기에 공백이 포함됩니까? 처럼values=""
Joseph

다른 체크 박스는 값이 없으므로 포함 할 필요가 없습니다.
Soryn

답변:


217

다음 querySelectorAll()과 같이 사용할 수 있습니다 .

var test = document.querySelectorAll('input[value][type="checkbox"]:not([value=""])');

이것은 다음으로 번역됩니다.

"value"속성이있는 모든 입력을 가져오고 공백이 아닌 "value"속성을 갖습니다.

이 데모에서는 값이 공백이 아닌 확인란을 비활성화합니다.


확인란 유형 입력 만 선택하는 방법은 무엇입니까? 값 속성이있는 다른 입력 태그가 많이 있지만 확인란 만 원합니다.
Soryn

1
@Soryn 추가 [type="checkbox"]. 내 대답을 업데이트했습니다.
Joseph

2
좋은 대답! 이렇게하면 DOM 탐색을 위해 미니 라이브러리에 jQuery를 포함 할 필요가 거의 없습니다. 아래 답변에 몇 가지 추가 팁이 있습니다.
mattdlockyer 2014 년

자바 스크립트 전에이 같은 구문을 볼 수 없습니다 ([값 = ""] 내가 didnt한다 : 당신이 나에게 말할 수있는 것은이 구문 입력 [값] [유형 = "체크 박스"] 무엇
블랙 호크

@blackHawk 구문은 CSS 선택자를 사용합니다. MDN에서 지정한대로 "쉼표로 구분 된 하나 이상의 CSS 선택자를 포함하는 문자열"입니다. 여기에서 CSS 선택기에 대해 읽을 수 있습니다 .
martieva

21

추가 팁 :

다중 "nots", 숨겨지지 않고 비활성화되지 않은 입력 :

:not([type="hidden"]):not([disabled])

또한 이것을 할 수 있다는 것을 알고 계셨습니까?

node.parentNode.querySelectorAll('div');

이것은 jQuery와 동일합니다.

$(node).parent().find('div');

"노드"와 그 아래의 모든 div를 재귀 적으로 효과적으로 찾을 수 있습니다. HOT DAMN!


20

귀하의 예 :

<input type="checkbox" id="c2" name="c2" value="DE039230952"/>

예제에서 $$를 document.querySelectorAll로 바꿉니다.

$$('input') //Every input
$$('[id]') //Every element with id
$$('[id="c2"]') //Every element with id="c2"
$$('input,[id]') //Every input + every element with id
$$('input[id]') //Every input including id
$$('input[id="c2"]') //Every input including id="c2"
$$('input#c2') //Every input including id="c2" (same as above)
$$('input#c2[value="DE039230952"]') //Every input including id="c2" and value="DE039230952"
$$('input#c2[value^="DE039"]') //Every input including id="c2" and value has content starting with DE039
$$('input#c2[value$="0952"]') //Every input including id="c2" and value has content ending with 0952
$$('input#c2[value*="39230"]') //Every input including id="c2" and value has content including 39230

다음과 함께 직접 예제를 사용하십시오.

const $$ = document.querySelectorAll.bind(document);

몇 가지 추가 사항 :

$$(.) //The same as $([class])
$$(div > input) //div is parent tag to input
document.querySelector() //equals to $$()[0] or $()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.