2015-11-23 2 views
1

Я хочу, чтобы иметь возможность искать DOM для определенной строки. Если текст находится на странице, скрыть некоторые элементы и показать другие. Ловушка - это идентификаторы даются динамически в инструкции PHP foreach.Как скрыть родительский элемент на основе текстового значения ребенка

Я попытался найти функцию .exists(), специфичную для текста. До сих пор я пытался:

jQuery(document).ready(function($) { 
    var string1 = 'string1', 
     string2 = 'string2'; 

    if ($('li').children().text() === string1) { 
     if ($('li').children().text() === string2) { 
      $(this).parent().show(); 
     } else { 
      $(this).parent().hide(); 
     } 
    } else { 
     if ($('li').children().text() === string2) { 
      $(this).parent().hide(); 
     } else { 
      $(this).parent().show(); 
     } 
    } 
}); 

так, что я ищу:

1) страницы поиска для string1.

2) если строка1 существует на странице, отображается родительский элемент дочернего элемента, который содержит строку2, и скрыть любую другую строку.

3) если не существует скрыть строка1 и строка2.

но это не работает. Я не самый лучший из JQuery/JS, и вообще я новичок в этом.

+0

может также предоставить образец вашего HTML пожалуйста. Ваше первое выражение 'if' кажется излишним, так как у вас есть одна и та же логика в обоих условиях. –

+0

html генерируется динамическим с циклом foreach - я могу добавить его, но единственное, что вы увидите, это $ this-> getTitle() и т. Д. – TT120

+0

Просьба описать, чего вы хотите достичь, потому что у вас неправильное условие в коде , –

ответ

1

Чтобы узнать, содержит ли строка другую (под) строку, вы можете использовать indexOf. И проверьте, не ли это -1.

Использование each() вы можете перевернуть все элементы li. Берем jsFiddle (при условии, в комментарии) во внимание, я получил этот результат: http://jsfiddle.net/ub8c6smh/5/

jQuery(document).ready(function($) { 
    var string1 = 'string1', 
     string2 = 'string2'; 
    var string1exists= $('li').text().indexOf(string1)!==-1; 
    console.log(string1exists); 

    $('li').each(function() { 
     if ($(this).text().indexOf(string2)!==-1 && string1exists==true) { 
      // this child contains string 2 
      $('li').hide(); //hide all others 
      $(this).show();      
     } 
     if ($(this).text().indexOf(string2)!==-1 && string1exists==false) { 
      // this child contains string 2 
      $(this).hide();      
     } 
     if ($(this).text().indexOf(string1)!==-1 && string1exists==false) { 
      // this child contains string 1 
      $(this).hide();      
     } 
    }); 

}); 
+0

К сожалению, это не сработало :(см. Пересмотренный вопрос для получения дополнительной информации, если необходимо – TT120

+0

Вам нужно зациклиться на детях. Позвольте мне уточнить мой ответ –

+0

Ok спасибо Bas :) – TT120

Смежные вопросы