2017-11-15 10 views
0

この最初に目に見えない作りのli要素はHTMLです:フィルタリングされたHTMLリスト:

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="orasul tau.."> 

<ul id="myUL"> 
    <li>Bucuresti</li> 
    <li>Cluj</li> 
    <li>Timisoara</li> 
</ul> 

そして、これは私のザ・スクリプトです:

var value = $('#myInput').val(); 
if(value.length == 0) { 
    $("#myUL li").style.display = "none"; 
} 

$('#myInput').bind('keyup', function() { 
    var searchString = $(this).val();  
    $("ul li").each(function(index, value) { 
     currentName = $(value).text() 
     if(currentName.toUpperCase().indexOf(searchString.toUpperCase()) > -1) { 
      $(value).show(); 
     } else { 
      $(value).hide(); 
     } 
    }); 
}); 

私はテキストに基づいて、ULの要素をフィルタリングします入力に

初期のifの文はすべて正常に動作していますが、すべてのli要素の初期値はdiplay:noneであることが必要です。それを追加すると、フィルタリング全体が無効になります。ifどのように私はそれを行うことができるすべての可能な解決策?

ご協力いただければ幸いです。

答えて

1

問題は$("#myUL li").style.display = "none"は意味がありません。 $("#myUL li")は、HTMLElementではなくjQueryインスタンスオブジェクトです。したがって、プロパティーはstyleではありません。

$("#myUL li").hide()を使用すると、すべての要素が非表示になります。

しかし、より良いアプローチはmyInputが価値がある場合は、最初はLIを隠し、ページロードの1件の検索をトリガするためにCSSを使用することです:

var $input = $('#myInput').on('input', function() { 
 
    var searchString = $(this).val(); 
 
    $("ul li").each(function(index, value) { 
 
    var currentName = $(value).text() 
 
    var shouldShow = searchString.length && currentName.toUpperCase().indexOf(searchString.toUpperCase()) > -1; 
 
    
 
    if (shouldShow) { 
 
     $(value).show(); 
 
    } else { 
 
     $(value).hide(); 
 
    } 
 
    }); 
 
}); 
 

 
var value = $input.val(); 
 

 
if (value.length !== 0) { 
 
$input.trigger('keyup'); 
 
}
#myUL li { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="myInput" placeholder="orasul tau.."> 
 

 
<ul id="myUL"> 
 
    <li>Bucuresti</li> 
 
    <li>Cluj</li> 
 
    <li>Timisoara</li> 
 
</ul>

+0

は良い作業、ありがとうございます!しかし、入力ボックスに何らかのテキストを書いてそれを削除した後も、すべての要素はまだ残っていますか?どのように私はそれを修正するための任意のアイデア? –

+0

@ M.Vlad 'searchString'が空でないことを確認し、それをshow/hide条件の一部として使用します。更新された回答を確認します。 – dfsq

+0

作業中!ありがとうございました! –

0

https://jsfiddle.net/Lmhw3u5n/1/

JSを

var value = $('#myInput').val(); 
//if(value.length == 0) { 
    //$("#myUL li").style.display = "none"; 
//} 

$('#myInput').bind('keyup', function() { 
    var searchString = $(this).val();   
    if(searchString == '') { 
     document.getElementById('myUL').style.display = 'none'; 
    } 
    else { 
     document.getElementById('myUL').style.display = 'block'; 
    } 
    $("ul li").each(function(index, value) { 
     currentName = $(value).text() 
     if(currentName.toUpperCase().indexOf(searchString.toUpperCase()) > -1) { 
      $(value).show(); 
     } else { 
      $(value).hide(); 
     } 
    }); 
}); 
1

は次のように$('#myUL li').hide()を試してみてください:

var value = $('#myInput').val(); 
 
if(value.length == 0) { 
 
    $('#myUL li').hide(); 
 
} 
 

 
$('#myInput').bind('keyup', function() { 
 
    var searchString = $(this).val();  
 
    $("ul li").each(function(index, value) { 
 
     currentName = $(value).text() 
 
     if(searchString == ''){$('#myUL li').hide(); } 
 
     else if(currentName.toUpperCase().indexOf(searchString.toUpperCase()) > -1) { 
 
     $(value).show(); 
 
     } else { 
 
     $(value).hide(); 
 
     } 
 
    }); 
 
}); 
 

 
function myFunction(){}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="orasul tau.."> 
 

 
<ul id="myUL"> 
 
    <li>Bucuresti</li> 
 
    <li>Cluj</li> 
 
    <li>Timisoara</li> 
 
</ul>

+0

うまくいきました!ただし、入力ボックスにテキストを入力してから削除すると、すべての要素が表示されます。どのように私はそれを修正するための任意のアイデア? –

+0

@ M.Vlad、私はスニペットを更新しました。確認してお知らせください - ありがとうございます。 – Mamun

+0

ありがとう、働いて! –

関連する問題