2012-01-03 5 views
52

querySelector 또는 querySelectorAll을 사용하여 와일드 카드 요소 이름을 일치시키는 방법이 있습니까? 나는 속성 쿼리에서 와일드 카드에 대한 지원을 보지만 엘리먼트 자체에 대해서는 지원하지 않는다.querySelector, 와일드 카드 요소 일치?

구문 분석하려는 XML 문서는 기본적으로 속성의 플랫 목록이며 해당 이름에 특정 문자열이있는 요소를 찾아야합니다.

필자는 XML 문서가 필요할 경우 구조 조정이 필요할 것임을 알고 있지만 실제로는 그렇게되지 않을 것입니다.

분명히 사용되지 않는 XPath (IE9가 삭제됨)를 사용하는 것을 제외한 모든 해결책이 허용됩니다.

+0

"이름"이란 태그 이름을 의미합니까? – kennytm

+1

불행히도 예 –

+0

@ JaredMcAteer의 대답은 대답으로 받아 들여질 가치가 있습니다. 고려해보십시오. – RBT

답변

144

[id^='someId']someId으로 시작하는 모든 ID와 일치합니다.

[id$='someId']someId으로 끝나는 모든 ID와 일치합니다.

[id*='someId']someId을 포함한 모든 ID와 일치합니다.

name 속성을 찾으려면 idname으로 대체하십시오.

for(var i=0,els=document.querySelectorAll('*'); i<els.length; 
      els[i].setAttribute('tagName',els[i++].tagName)); 

나는이에게 자신을 필요 :

하면 내가 querySelector

+3

감사합니다. 태그 이름을 의미했습니다. –

+0

is ie8 + ??? – SuperUberDuper

+0

흠 나는 document.querySelectorAll ("div [id $ = 'foo']") – SuperUberDuper

5

명시 적 속성으로 태그 이름을 설정 사용 방법이 믿지 않는 요소의 태그 이름에 대해 이야기하는 경우 , 중첩 된 태그가 _Sequence으로 끝나는 XML 문서의 경우 자세한 내용은 JaredMcAteer 답변을 참조하십시오.

document.querySelectorAll('[tagName$="_Sequence"]') 

내가 될 것이라고 말하지 않았다 꽤 :) PS : 나는 태그 이름을 통해 tag_name를 사용하는 것이 좋습니다 것입니다, 그래서 '컴퓨터 생성', 암시 적 DOM 속성을 읽을 때 당신이 간섭으로 실행되지 않습니다.

4

내가 &이 &는 내 질문에 대답하기위한 @JaredMcAteer하는 학점, 태그 이름 & querySelector()를 사용하여 영업 질문에 대한 가능한 답변을 여기에 결국 querySelector()를 포함하는 하나의 라이너에 숙고/장난 한, 일명 다음은 &는 OP의 요구 사항이나 다른 사람의에 맞게 도움이 될 것입니다 희망 바닐라 자바 ​​스크립트

에 querySelector()와 정규식 같은 경기가 :

// basically, of before: 
var youtubeDiv = document.querySelector('iframe[src="http://www.youtube.com/embed/Jk5lTqQzoKA"]') 

// after  
var youtubeDiv = document.querySelector('iframe[src^="http://www.youtube.com"]'); 
// or even, for my needs 
var youtubeDiv = document.querySelector('iframe[src*="youtube"]'); 

다음을, 우리는, 예를 들어, SRC 물건을 얻을 수 있습니다 등 ...

console.log(youtubeDiv.src); 
//> "http://www.youtube.com/embed/Jk5lTqQzoKA" 
console.debug(youtubeDiv); 
//> (...) 

+

-7

이 나를 위해 작동합니다

NSString *nameInWeb = [NSMutableString stringWithFormat:@"document.querySelector('[name$=\"057\"]').name"]; 

가 "057"아 파크 끝나는 모든 이름을 표시합니다.

+0

어떤 프로그래밍 언어입니까?! 이것은 ** JavaScript ** 질문입니다 –

+0

이것은 JavaScript가 아닌 Objective C입니다. – vonox7

1

방금이 짧은 스크립트를 작성했습니다. 작동하는 것 같습니다.

/** 
* Find all the elements with a tagName that matches. 
* @param {RegExp} regEx regular expression to match against tagName 
* @returns {Array}  elements in the DOM that match 
*/ 
function getAllTagMatches(regEx) { 
    return Array.prototype.slice.call(document.querySelectorAll('*')).filter(function (el) { 
    return el.tagName.match(regEx); 
    }); 
} 
getAllTagMatches(/^di/i); // Returns an array of all elements that begin with "di", eg "div"