Jquery находит строку в DOM и получает его элемент

Есть ли способ получить элемент из объектов DOM, которые содержат некоторую строку? Я пытаюсь:

$( "*:contains('searchedString')" ).first().text( "test" );

или же

$( "*:contains('searchedString')" ).text( "test" );

Но это возвращает объект <html>, поэтому после выполнения весь контент исчезает и на экране отображается только test.

Обновлено:

  • Мне нужен поиск по всему документу, поэтому селектор * ...
  • Типы DOM могут быть h2, div и т. д.

Вам нужно быть более точным в своем селекторе. * не даст вам желаемого результата.

Zenoo 22.06.2018 11:11

Но мне нужен поиск по всему документу ...

Lajdák Marek 22.06.2018 11:11

Объект DOM со строкой будет типами ввода или любыми другими тегами, такими как <p> или <div> и т. д.?

Himanshu Upadhyay 22.06.2018 11:13

К сожалению - да ....

Lajdák Marek 22.06.2018 11:13

html или body содержат это содержимое. вы должны использовать тег элемента, такой как p или span или что-то еще.

Terry Wei 22.06.2018 11:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
1 573
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Получение всего с * всегда будет включать тег <html>.

Чтобы получить самый глубокий элемент, вы можете получить последний элемент, найденный вашим селектором, используя метод jQuery .last():

<div><span>test</span></div>

let deepestElement = $("*:contains('test')").last();
console.info(deepestElement);

Вот рабочий JSFiddle: https://jsfiddle.net/Zenoo0/ryjtwdqb/2/

Вы можете получить все результаты без дочерних элементов, как показано ниже:

var result = $( "*:contains('searchedString'):not(:has(*))" ).text( "test" );
console.info(result);
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <span>searchedString</span>
</div>

Или вы можете ограничить селектор тегами, чтобы избежать нежелательных результатов.

И вы можете использовать filter, чтобы получить полезную часть.

var tags = ['div', 'p', 'span'];
var str = "";
var result = $(tags.join(',')).filter(':contains("searchedString")');
console.info(result.length);
// ... filter result or something
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <span>searchedString</span>
</div>
$( "h1,h2,div:contains(searchStrinng)" ).first().text( "test" );
$( "h1,h2,div:contains(searchStrinng)" ).text( "test" );

Example:
<h1>Hello</h1>
<h2>Hello</h2>

- For first element (include only h1,h2,div) 
$( "h1,h2,div:contains(Hello)" ).first().text( "test" );

- For all element(include only h1,h2,div)
$( "h1,h2,div:contains(Hello)" ).text( "test" );

Другие вопросы по теме