2014-11-06 2 views
3

Моей неупорядоченной структуре дерева Списка выглядит следующим образом:Ищешь пункт в UL

<ul id="Budor"> 
    <li class="L-1">First 
     <span class='jor'>+</span> 
     <ul> 
      <li class="L-2">First Child 
       <span class='jor'>+</span> 
       <ul> 
        <li>Tropical Thunder</li> 
        <li>Magnolia</li> 
       </ul> 
      </li> 
     </ul> 
     </li> 

Я печатаю текст в текстовом поле и поиск элемента в этом списке. Вот мой демо http://jsfiddle.net/yunabna5/

я столкнулся три основные проблемы:

  1. На каждый печатаемый символ, список закрывается и открывается.
  2. Элемент списка, а также родители также подсвечиваются. Я хочу, чтобы только элементы списка с поисковым запросом должны были подсвечиваться.
  3. После того как список ищется, я не могу расширить другие списки

Как исправить мой код? Предложения?

+0

это может объяснить причину выделения родителя ... 'console.log ($ ('. L-2: first'). Text())'. Он также содержит текст его потомков. – charlietfl

+0

и как его исправить? – user195668

+0

будет иметь больше контроля с помощью jQuery 'filter()'. Затем проверьте, имеет ли элемент sub UL, также может преобразовать регистр внутри фильтра, также если вы не хотите, чтобы текущий регистр чувствителен к регистру – charlietfl

ответ

0
$('#txt').keyup(function() { 
if(this.value == ""){ 
    bud.find('ul').stop(true, true).slideDown(500); 
    bud.find("li.highlight").removeClass("highlight"); 
    return; 
} 

if(bud.find('.highlight').length == 0){ 
    bud.find('ul').stop(true, true).slideUp(500); 
} 

bud.find("li ul") 
    .find('ul') 
    .find('li:contains(' + this.value + ')') 
    .addClass("highlight"); 

bud.find('li.highlight') 
    .stop(true) 
    .parentsUntil(bud) 
    .slideDown(500); 

});

Я думаю, что это решит вашу проблему http://jsfiddle.net/yunabna5/10/ если не скажите почему.

+0

Да, это устраняет проблему выделения родительского элемента, но поиск не работает должным образом. Попробуйте найти «tecss», и вы увидите, что Дороти подсвечивается, что неправильно. – user195668

+0

Попробуйте создать функцию с indexOf http://www.w3schools.com/jsref/jsref_indexof.asp или '===' http://www.w3schools.com/js/js_comparisons.asp, чтобы проверить, является ли ul/li введите строку, которую пользователь вводит. Фактически код соответствует Дороти, потому что у этого есть 't', который находится внутри 'Tecss'. – ronniery

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