2016-02-05 2 views
1
var spans = document.querySelectorAll('#divConfirm span'); 

spans.length = 43. 

Вот что охватывает как выглядитпоиск через список узлов элементов с использованием регулярных выражений

spans: [<span id=​"ctl00_cphBody_lblTitleOrder" style=​"color:​#003300;​font-family:​Verdana;​font-size:​18px;​">​Reservation Confirmation​</span>​, <span id=​"ctl00_cphBody_lblOrderNumber" style=​"color:​#003300;​font-family:​verdana;​font-size:​20px;​">​Reservation Number: 604905​</span>​, <span id=​"ctl00_cphBody_lblDate" style=​"color:​#003300;​font-family:​Verdana;​font-size:​18px;​">​Excursion Date: 8/1/2016​</span>​... 

Этот список пролеты содержат данные, и каждый из них имеет атрибут id. Я бы хотел, чтобы regex искал этот id, чтобы получить соответствующую точку данных.

Я бы обычно делал что-то вроде, например. spans.querySelectorAll("spans[id*='OrderNumber']")[0].

Но так как все элементы уже есть span, похоже, что это не сработает.

Как я могу искать прокси на основе регулярных выражений? Я рассматривал преобразование списка узлов списка в массив, но затем Google говорит, что вы не можете использовать регулярное выражение с indexOf, поэтому использование querySelectorAll() с перечнем узлов и регулярным выражением *= похоже на путь.

Как пример, как бы получить второй элемент в пролетах, элемент span OrderNumber?

+0

Просто опустите 'span':' spans.querySelectorAll ("[id * = 'OrderNumber' ] ") [0]'. Или, еще лучше, почему бы не использовать 'document.getElementById (OrderNumber)'? – RobertAKARobin

+0

спасибо, но Uncaught TypeError: spans.querySelectorAll не является функцией (...) –

+0

Regex - неправильный инструмент для задания, просто исправьте селектор запросов: 'document.querySelector ('# divConfirm span [id * =" OrderNumber "]') '. Конечно, это глупый селектор, когда вам нужно просто обновлять свои элементы для использования классов, а затем вы можете выбрать с помощью 'document.querySelector ('. Confirm .order-number')' – zzzzBov

ответ

1

Ну, нет querySelectorAll метод в объекте NodeList. Таким образом, вы просто не можете использовать querySelectorAll на NodeList spans.

Но вы могли бы использовать рукописные список фильтров так:

var filtered = Array.prototype.filter.call(spans, function (item) { 
    return /OrderNumber/.exec(item.id); 
}); 

Или в ES6:

let filtered = Array.prototype.filter.call(spans, (item) => /OrderNumber/.exec(item.id)); 

Другой способ сохранить ссылку на #divConfirm элемент, а затем использовать querySelectorAll на это:

var filtered = divConfirm.querySelectorAll('span[id*="OrderNumber"]'); 
Смежные вопросы