<p data-foo="bar">
당신은 어떻게 동등한 것을 할 수 있습니까?
document.querySelectorAll('[data-foo]')
querySelectorAll을 사용할 수없는 곳 은 어디 입니까?
최소한 IE7에서 작동하는 기본 솔루션이 필요합니다. IE6는 신경 쓰지 않습니다.
답변
getElementsByTagName ( ‘*’)을 실행하고 “data-foo”속성이있는 요소 만 반환하는 함수를 작성할 수 있습니다.
function getAllElementsWithAttribute(attribute)
{
var matchingElements = [];
var allElements = document.getElementsByTagName('*');
for (var i = 0, n = allElements.length; i < n; i++)
{
if (allElements[i].getAttribute(attribute) !== null)
{
// Element exists with attribute. Add to array.
matchingElements.push(allElements[i]);
}
}
return matchingElements;
}
그때,
getAllElementsWithAttribute('data-foo');
답변
사용하다
//find first element with "someAttr" attribute
document.querySelector('[someAttr]')
또는
//find all elements with "someAttr" attribute
document.querySelectorAll('[someAttr]')
속성으로 요소를 찾습니다. 이제 모든 관련 브라우저 (IE8 포함)에서 지원됩니다. http://caniuse.com/#search=queryselector
답변
나는 약간 놀았고이 조잡한 해결책으로 끝났습니다.
function getElementsByAttribute(attribute, context) {
var nodeList = (context || document).getElementsByTagName('*');
var nodeArray = [];
var iterator = 0;
var node = null;
while (node = nodeList[iterator++]) {
if (node.hasAttribute(attribute)) nodeArray.push(node);
}
return nodeArray;
}
사용법은 매우 간단하며 IE8에서도 작동합니다.
getElementsByAttribute('data-foo');
// or with parentNode
getElementsByAttribute('data-foo', document);
http://fiddle.jshell.net/9xaxf6jr/
하지만 권장 사용 querySelector
/ All
이것에 대한 (그리고 오래된 브라우저가 사용 지원 polyfill을 ) :
document.querySelectorAll('[data-foo]');
답변
이것을 시도해보십시오.
document.querySelector ( ‘[attribute = “value”]’)
예 :
document.querySelector('[role="button"]')
답변
그것도 작동합니다.
document.querySelector([attribute="value"]);
그래서:
document.querySelector([data-foo="bar"]);
답변
이것을 시도하십시오-위의 답변을 약간 변경했습니다.
var getAttributes = function(attribute) {
var allElements = document.getElementsByTagName('*'),
allElementsLen = allElements.length,
curElement,
i,
results = [];
for(i = 0; i < allElementsLen; i += 1) {
curElement = allElements[i];
if(curElement.getAttribute(attribute)) {
results.push(curElement);
}
}
return results;
};
그때,
getAttributes('data-foo');
답변
필요한 경우 값으로 속성 을 가져올 수 있도록 @kevinfahy의 답변 에 대한 약간의 수정 :
function getElementsByAttributeValue(attribute, value){
var matchingElements = [];
var allElements = document.getElementsByTagName('*');
for (var i = 0, n = allElements.length; i < n; i++) {
if (allElements[i].getAttribute(attribute) !== null) {
if (!value || allElements[i].getAttribute(attribute) == value)
matchingElements.push(allElements[i]);
}
}
return matchingElements;
}