Как проверить, видна ли вхождение строки на странице, используя JavaScript

0

Есть несколько вопросов, которые похожи на это. Но я не нашел этот точный вопрос о SO. (и ответа в другом месте).

Мне просто нужно знать, показывает ли строка в наименьшей степени. Вполне возможно, что строка встречается несколько раз в HTML, что она скрыта один раз и показывает другое время.

Это о видимости на странице, не обязательно в окне просмотра. Таким образом, если вам нужно прокрутить, чтобы просмотреть его, это тоже нормально.

UPDATE: Я знаю :contains и is(":visible") что не проблема. Элементы могут быть вложенными, конечно, и должны работать при любых обстоятельствах.

  • 0
    Если строка имеет такое специфическое значение, разве она не будет заключена в span или аналогичный объект, например, который вы украсили атрибутом данных или классом, который должен облегчить это?
  • 0
    Я ищу универсальное решение, я не знаю заранее, где его можно обернуть
Показать ещё 9 комментариев
Теги:
visibility

2 ответа

2
Лучший ответ

Следующее должно работать, но это не самое эффективное решение:

$("body, body *").contents().filter(function () {
    return this.nodeType === 3 && this.nodeValue.indexOf("Foo & Bar") >= 0;
}).parent(":visible");

Этот код:

  • Обнаруживает все текстовые узлы в документе, которые содержат указанную строку 1
  • И проверяет, отображается ли их родительский 2

1 Это означает самый глубокий узел, который содержит строку. Селектор :contains селектор, будет бесполезным, поскольку он может вернуть видимый элемент (на самом деле ветвь элементов), содержащий невидимый дочерний элемент, содержащий указанную строку.

2 Элемент отображается, если его родители также видны

  • 0
    Салман, отличная работа! Я должен сделать еще несколько тестов и принять его позже, но в каждом случае
  • 0
    У меня сейчас не будет времени на тщательное тестирование, я согласился, поэтому не могу забыть. Очень простой тест можно найти здесь: jsfiddle.net/7caG5/1
Показать ещё 2 комментария
0

Вы можете использовать : содержит над вашим телом элемент вместе с length, которая подсчитывает количество совпадений.

if($('body:contains("demo")').length){
    alert("The world exists");
}else{
    alert("The world doesn't exist");   
};
  • 0
    Это также с учетом невидимого текста

Ещё вопросы

Сообщество Overcoder
Наверх
Меню