contains без учёта предков
День добрый.
Решение простейшей задачи превратилось в бред сивой кобылы в лунную ночь. Гугление не помогло. Имеется: Код:
... Получить "<div>Спам<div>". Использовал $('div:contains("Спам")'), она конечно же выводит и всех предков, которых десятки. Как поучить только див содержащий нужную строку, или отфильтровать результат contains? |
zxcp,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .red{ color: #FF0000; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $('div:contains("Спам")').filter(function() { return !$(this).children().length }).addClass("red") }); </script> </head> <body> <div> <div> test <div>Спам</div> </div> </div> </body> </html> |
zxcp,
(function(str) { var d = document.querySelectorAll('div'); d = [].filter.call(d, function(elem, indx) { return elem.firstChild && elem.firstChild.textContent == str; })[0]; alert(d.textContent); })('Спам'); |
Цитата:
|
рони, спасибо, добрый человек. Один нюанс. Если искомый элемент будет содержать дочерний элемент, скрипт ведь не сработает?
Rasy, :-D. Суровый косяк)) Код не скопирован, а прямо на форуме напечатал. Но мне стыдно) |
Цитата:
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .red{ color: #FF0000; } .red > *{ color: #000000; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $('div').contents().filter(function() { return this.nodeType == 3 && this.textContent.indexOf('Спам') != -1 }) .parent().addClass("red") }); </script> </head> <body> <div> <div> test <div>Спам <i>test</i></div> </div> </div> </body> </html> |
$('div:contains("Спам"):not(:has(*))') |
Alexandroppolus,
Спецы пропагандируют реакт, а сами пишут на джиквери?☻ |
Rasy,
увы, по нынешней работе есть куски кода, не самые новые :) |
Часовой пояс GMT +3, время: 00:02. |