속성 값을 기반으로 DOM에서 요소 찾기


252

주어진 속성 이름과 속성 값을 가진 요소를 검색하는 DOM API가 있는지 알려주세요.

다음과 같은 것 :

doc.findElementByAttribute("myAttribute", "aValue");

1
Jquery Sol을 찾고 있다면 복제하십시오 : stackoverflow.com/questions/696968/…
Rajat

13
Wojtek의 답변 인 현대적인 솔루션으로 수락 된 답변을 업데이트 할 수 있습니까?
Nick Craver

답변:


165

업데이트 : 지난 몇 년 동안 풍경이 크게 바뀌 었습니다. 이제 안정적으로 사용할 수 있습니다 querySelectorquerySelectorAll참조 보이 테크의 대답 이 작업을 수행하는 방법에 대한합니다.

이제 jQuery 종속성이 필요하지 않습니다. jQuery를 사용하는 경우 훌륭합니다 ... 사용하지 않는 경우 더 이상 속성별로 요소를 선택하기 위해 의존하지 않아도됩니다.


바닐라 자바 ​​스크립트 에서이 작업을 수행하는 매우 짧은 방법은 없지만 사용할 수있는 솔루션이 있습니다.

요소를 반복하고 속성을 확인하여 이와 같은 작업을 수행합니다.

jQuery 와 같은 라이브러리 가 옵션 이라면 다음과 같이 조금 더 쉽게 할 수 있습니다.

$("[myAttribute=value]")

값이 유효한 CSS 식별자 가 아닌 경우 (공백 또는 문장 부호 등) 값 주위에 따옴표가 필요합니다 (단일 또는 이중 일 수 있음).

$("[myAttribute='my value']")

당신도 할 수있는 start-with, ends-with, contains, 등 ... 속성 선택에 대한 몇 가지 옵션이 있습니다 .


6
실제로 바닐라 JavaScript DOM API는 최신 브라우저에서 잘 작동합니다
Wojtek Kruszewski

2
@WojtekKruszewski 2010 년이 아닌 :) 나는 업데이트했지만, asker는 우리를 위해 동의를 움직일 것입니다-우리는 현재 정보를 원합니다.
Nick Craver

1
필자는 jQuery (또는 이와 동등한)가 아마도 필요한 것을 알지 않고도 브라우저 간 호환이 가장 쉬운 방법 일 것입니다.
Alexis Wilke

1
빈 배열을 계속 얻습니다! d 속성으로 SVG를 가져 오려고하고 있는데 $ ( "[d = path]"); 여기서 'path'는 필요한 특정 속성을 포함하는 변수입니다. 누군가 svg 경로로 이것을 시도 했습니까?
tx291

437

최신 브라우저는 기본을 지원 querySelectorAll하므로 다음을 수행 할 수 있습니다.

document.querySelectorAll('[data-foo="value"]');

https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

브라우저 호환성에 대한 세부 사항 :

jQuery를 사용하여 더 이상 사용되지 않는 브라우저 (IE9 이상)를 지원할 수 있습니다.

$('[data-foo="value"]');

2
"현대"정의를 구체화하기 위해 : caniuse.com/#search=querySelectorAll
serhio

값은 숫자 또는 숫자가 될 수없는 것 같습니다.SyntaxError: An invalid or illegal string was specified
jeum

3
선택자는 다음과 같아야합니다.'[data-foo="value"]'
Yotam Omer 2012

1
성능에 대한 메모가 있습니까? 이것이 모든 노드에서 반복되는 것보다 빠릅니까?
Stepan Yakovenko

1
"data-foo"는 무엇이며이 예제에서 'myAttribute'는 어디에 있습니까?
oo_dev

38

document.querySelector()document.querySelectorAll()메소드 를 사용하여 DOM에서 속성 선택기를 사용할 수 있습니다 .

당신을 위해 :

document.querySelector("selector[myAttribute='aValue']");

그리고를 사용하여 querySlectorAll():

document.querySelectorAll("selector[myAttribute='aValue']");

In querySelector()querySelectorAll()Methods "CSS"에서 선택한대로 객체를 선택할 수 있습니다.

https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors의 "CSS"속성 선택기에 대한 추가 정보


이 document.querySelectorAll ( "selector [myAttribute = aValue]"); 같은 따옴표를 제거해야했습니다.
Matjaz Hirsman

20
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps 정확한 요소 유형을 알고 있다면 세 번째 매개 변수 (예 :)를 추가하십시오 div, a, p ...etc....

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");   

그러나 처음에는이 기능을 정의하십시오.

function FindByAttributeValue(attribute, value, element_type)    {
  element_type = element_type || "*";
  var All = document.getElementsByTagName(element_type);
  for (var i = 0; i < All.length; i++)       {
    if (All[i].getAttribute(attribute) == value) { return All[i]; }
  }
}

의견 권장 사항에 따라 ps가 업데이트되었습니다.


6
왜 ?! 이 작업을 수행하여 모든 DOM을 반복합니다
Arthur

3
페이지에 5 개의 요소 만있는 경우에 좋습니다.
보안관

2
document.querySelectorAll('[data-foo="value"]');@Wojtek Kruszewski가 수락 한 차양에서 제안한대로.
Arthur

7

다음은 src 속성으로 문서에서 이미지를 검색하는 예입니다.

document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");


0

쿼리 선택기 사용 예 :

document.querySelectorAll(' input[name], [id|=view], [class~=button] ')

input[name]name속성을 가진 요소를 입력 합니다.

[id|=view]로 시작하는 id를 가진 요소 view-.

[class~=button]button클래스 와 요소 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.