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, время: 12:21. |