2013-08-30 4 views
1

Я ищу сканирование страницы и поиск любых элементов html, у которых есть класс или идентификатор, который содержит слово price. Моя мысль заключалась в том, чтобы использовать регулярное выражение здесь, но я не могу заставить его правильно стрелять.jQuery Selector с регулярным выражением

Я использую Safari и Chrome на OS X

var price = $("div:regex(\bprice\b)").text(); 

Цель состоит в том, чтобы получить цену продукта на сайте электронной коммерции, если оно уже не указано в Open Graph, который уже обрабатывается ,

+0

Интересный альтернативный способ сделать это: http://stackoverflow.com/questions/1163888/jquery-get-only-all-html-elements-with -ids Хотя может быть перфоманс: (Но все же, интересно. –

ответ

3

"\b" такой же, как "\x08".

побег \:

var price = $("div:regex(\\bprice\\b)").text(); 
+0

спасибо за это, но я получаю это в консоли 'Ошибка: Синтаксическая ошибка, нераспознанное выражение: unsupported pseudo: regex' –

+3

' regex' не является частью jQuery, вам нужно использовать http://james.padolsey.com/javascript/regex-selector-for-jquery/ – Barmar

+0

Огромное спасибо за то, что вы сейчас поняли какие-то мысли? 'TypeError: 'undefined' не является объектом (оценивая 'match [3]')' –

2

Простой способ заключается в использовании содержит селектор слов:

$('div[id~="price"], div[class~="price"]') 

Посмотреть http://api.jquery.com/attribute-contains-word-selector/

+0

I попытались использовать этот '$ ('div [id ~ =" price "], div [class ~ =" price "], span [id ~ =" price "], span [class ~ =" price "], p [ class ~ = "price"], p [id ~ = "price"] '). first(). text(); 'и он работает хорошо, однако кажется немного беспорядочным любые мысли? –

+1

Так что просто используйте '$ ('[id ~ =" price "], [class ~ =" price "]')' – sinsedrix

0

Вы можете сделать это, добавив новый селектор pseuo:

jQuery.expr[':'].regex = function(elem, index, match) { 
    var regex = new RegExp(match[3]), 
     $elem = $(elem); 
    return regex.test($elem.attr('class')) || regex.test($elem.attr('id')); 
}; 

и вы можете использовать этот селектор, используя:

$("div:regex(\\bprice\\b)") 
Смежные вопросы