элемент поиска jquery по тексту
Может ли кто-нибудь сказать мне, можно ли найти элемент на основе его содержимого, а не id или classа ?
Я пытаюсь найти элементы, которые не имеют отдельных classов или идентификаторов. (Тогда мне нужно найти родителя этого элемента.)
- Java List.contains (объект с значением поля, равным x)
- Поиск UNIX для поиска имен файлов, не заканчивающихся конкретными расширениями?
Вы можете использовать :contains
селектор, чтобы получать элементы на основе их содержимого.
This is a test Another Div $('div:contains("test")').css('background-color', 'red');
Демо здесь
в документации jquery говорится:
Соответствующий текст может отображаться непосредственно в выбранном элементе, в любом из потомков этого элемента или в комбинации
поэтому недостаточно, чтобы вы использовали : содержит селектор, вам также нужно проверить, является ли текст, который вы ищете, прямым содержимым элемента, на который вы нацеливаетесь … что-то вроде этого:
function findElementByText(text){ var jSpot=$("b:contains("+text+")") .filter(function(){ return $(this).children().length === 0;}) .parent(); // because you asked the parent of that element return jSpot; }
Феллас, я знаю, что это старо, но эй, у меня есть это решение, которое, я думаю, работает лучше всех. Прежде всего, он преодолевает чувствительность к регистру, которую jquery: contains () поставляется с:
var text = "text"; var search = $( "ul li label" ).filter( function () { return $( this ).text().toLowerCase().indexOf( text.toLowerCase() ) >= 0; }).first(); // Returns the first element that matches the text. You can return the last one with .last()
Надеюсь, что кто-то в ближайшем будущем окажется полезным.
Да, используйте селектор jQuery.
Ответ Rocket не работает.
hhhhhh This is a test Another Div
Я просто изменил его DEMO здесь, и вы увидите, что выбран корень DOM.
$('div:contains("test"):last').css('background-color', 'red');
добавьте « последний » в код, чтобы исправить это.
Лучший способ, на мой взгляд.
$.fn.findByContentText = function (text) { return $(this).contents().filter(function () { return $(this).text().trim() == text.trim(); }); };