2017-02-02 4 views
2

У меня возникла проблема с выбором и соответствием innerHTML с помощью querySelectorAll.Получить все элементы, которые начинаются с определенного innerHTML с помощью селектора запросов?

Вот что я сделал:

document.querySelectorAll('*[class^="js-display-url"]').contains('product') 

Что HTML является:

<span class="js-display-url">product/poss/newslanges</span> 

Но я хочу, чтобы соответствовать классу JS-дисплей-URL, начиная с продуктом, но не могу сделать это , пожалуйста помоги.

+0

Там нет DOM селекторы, которые смотрят на текстовые узлы внутри элементов. – 4castle

+0

так как я могу проверить для innerHTML любым другим способом, что то, что я пробовал. есть много элементов, которые начинаются с продукта. –

ответ

2

С DOM селекторов вы не можете выбрать элементы на основе внутренней HTML, но вы можете перебрать все элементы с этого класса и одного из тех, которые соответствуют вашему условию:

var allElements = document.querySelectorAll('*[class^="js-display-url"]'); 
var myElements = []; 

for (var i = 0; i < allElements.length; i++) { 
    if (allElements[i].innerHTML.startsWith('product')) { 
     myElements.push(allElements[i]); 
    } 
} 
1

Существует не DOM, который будет фильтроваться на основе текстовых узлов, но вы можете фильтровать с помощью некоторых методов массивов, поскольку NodeList имеет тип массива.

В частности, Array.prototype.filter может получить элементы, соответствующие вашим критериям.

var filter = Array.prototype.filter; 
 

 
var allElements = document.querySelectorAll('.js-display-url'); 
 
var productElements = filter.call(allElements, function(element) { 
 
    return element.innerText.startsWith('product'); 
 
}); 
 

 
console.log(productElements);
<span class="js-display-url">product/poss/newslanges</span>

Смежные вопросы