Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   contains без учёта предков (https://javascript.ru/forum/jquery/71275-contains-bez-uchjota-predkov.html)

zxcp 06.11.2017 13:36

contains без учёта предков
 
День добрый.
Решение простейшей задачи превратилось в бред сивой кобылы в лунную ночь. Гугление не помогло.
Имеется:
Код:

...
<div>
  <div>
    <div>Спам<div>
  <div>
<div>
...

Задача:
Получить "<div>Спам<div>".
Использовал $('div:contains("Спам")'), она конечно же выводит и всех предков, которых десятки. Как поучить только див содержащий нужную строку, или отфильтровать результат contains?

рони 06.11.2017 13:54

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>

Rasy 06.11.2017 13:59

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 06.11.2017 14:10

Цитата:

Сообщение от zxcp
превратилось в бред сивой кобылы в лунную ночь.

Тэги в дивах не мешало бы закрыть <div></div> 🙉

zxcp 06.11.2017 14:16

рони, спасибо, добрый человек. Один нюанс. Если искомый элемент будет содержать дочерний элемент, скрипт ведь не сработает?

Rasy, :-D. Суровый косяк)) Код не скопирован, а прямо на форуме напечатал. Но мне стыдно)

рони 06.11.2017 14:22

Цитата:

Сообщение от zxcp
Один нюанс.

:write: ...

<!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>

Alexandroppolus 06.11.2017 17:01

$('div:contains("Спам"):not(:has(*))')

Rasy 06.11.2017 17:10

Alexandroppolus,
Спецы пропагандируют реакт, а сами пишут на джиквери?☻

Alexandroppolus 06.11.2017 17:12

Rasy,
увы, по нынешней работе есть куски кода, не самые новые :)


Часовой пояс GMT +3, время: 00:02.