Хтось може сказати мені, чи можна знайти елемент на основі його вмісту, а не за ідентифікатором чи класом ?
Я намагаюся знайти елементи, у яких немає чітких класів чи ідентифікаторів. (Тоді мені потрібно знайти батьківського елемента.)
Хтось може сказати мені, чи можна знайти елемент на основі його вмісту, а не за ідентифікатором чи класом ?
Я намагаюся знайти елементи, у яких немає чітких класів чи ідентифікаторів. (Тоді мені потрібно знайти батьківського елемента.)
Відповіді:
Ви можете використовувати :contains
селектор для отримання елементів на основі їх вмісту.
$('div:contains("test")').css('background-color', 'red');
<div>This is a test</div>
<div>Another Div</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
.filter
замість цього. $('div').filter(function(){ return $(this).text().toLowerCase() === 'test';})
$('div:contains( "test" )').css('background-color', 'red');
У документації jQuery написано:
Текст, що відповідає, може відображатися безпосередньо в обраному елементі, в будь-якому з нащадків цього елемента або в їх комбінації
Тому недостатньо того, що ви використовуєте :contains()
селектор , вам також потрібно перевірити, чи шуканий текст є прямим вмістом елемента, на який ви орієнтуєтесь, щось подібне:
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;
}
<li>Hello <a href='#'>World</a>, How Are You.
. Ось, якщо How
розшукується, стан не вдасться, я думаю.
Людина, я знаю, що це старе, але ей, я маю це рішення, яке, на мою думку, працює краще за всіх. Перше і головне долає чутливість до випадку, що jquery: містить () постачається з:
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()
Сподіваюся, хтось найближчим часом вважатиме це корисним.
Відповідь ракети не працює.
<div>hhhhhh
<div>This is a test</div>
<div>Another Div</div>
</div>
Я просто змінив його DEMO тут, і ви можете бачити корінь DOM вибраний.
$('div:contains("test"):last').css('background-color', 'red');
Додайте в код селектор " : last ", щоб виправити це.
Найкращий спосіб, на мій погляд.
$.fn.findByContentText = function (text) {
return $(this).contents().filter(function () {
return $(this).text().trim() == text.trim();
});
};
Так, використовуйте contains
селектор jQuery .
Наведений нижче jQuery вибирає вузли div, які містять текст, але не мають дітей, які є вузлами листя дерева DOM.
$('div:contains("test"):not(:has(*))').css('background-color', 'red');
<div>div1
<div>This is a test, nested in div1</div>
<div>Nested in div1<div>
</div>
<div>div2 test
<div>This is another test, nested in div2</div>
<div>Nested in div2</div>
</div>
<div>
div3
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>