2016-10-02 18 views
4

私はフィルタリングする必要がある<li>アイテムの長いリストを持っています。私は目に見えるものが欲しい。ここには隠れた例があります:querySelector()は表示されません

<li style="display:none;" 
<a href="https://www.example.com/dogs/cats/"> 
<img class="is-loading" width="184" height="245" 
</a><span>dogscats</span> 
</li> 

隠されていないものは、表示可能な表示属性を持たず、まったくスタイル属性を持たないだけです。私はスタイル属性に基づいて選択することができますどのように

document.querySelectorAll('.newSearchResultsList li[style="display:none;"]') 

が等しくないか、含まれています。これは、私が何をしたいの反対与え

「表示:なし;」?

答えて

9

この全体のこと一種のハッキーですが、:not() seあなたの選択を逆転させる。あなたが正規化されてもよいスペースのためのセレクタを含めることになるでしょうので、いくつかのブラウザはスタイル属性を正規化用心

var elements = document.querySelectorAll(
 
    '.newSearchResultsList li:not([style*="display:none"]):not([style*="display: none"])' 
 
); 
 

 
console.log(elements);
<ul class="newSearchResultsList"> 
 
    <li style="display:none;">hidden 1</li> 
 
    <li style="display:block;">visisble 1</li> 
 
    <li style="display:none;">hidden 2</li> 
 
    <li style="display:block;">visisble 2</li> 
 
</ul>

+0

こんにちは、私はこの答えのシンプルさを好むが、 "いくつかのブラウザはスタイル属性を正規化することに注意してください。 –

+1

@DougFir基本的には、挿入するスタイル属性を書式設定するブラウザもありますが、そのような場合には、ページは解析時に自動的に表示されるか、またはスタイルプロパティを変更した場合は自動的に表示されます。そのため、セレクタにスペースを入れる必要があり、私のコードには空白と空白が1つずつあります。 –

0

これを試してみてください:

document.querySelectorAll('.newSearchResultsList li:hidden') 

または(EDITを:style属性に基づいています。)

document.querySelectorAll('.newSearchResultsList li[style*="display:none"]'); 

またはopossite

document.querySelectorAll('.newSearchResultsList li:not([style*="display:none"])'); 
+0

':。hidden'はJavascriptの標準的な部分ではありません。 jQueryはそれをサポートしますが、 'document.querySelectorAll()'はサポートしません。 – jfriend00

+1

タグはjavascriptとjquery-selectorsです。ただ答えました> _ < –

+2

こんにちは、2行目は私の必要と反対です!私は「含まない」必要がある。私は!=を使って試してみましたが、うまくいきませんでした。 –

0
  • 使用'.newSearchResultsList li'セレクタをすべてliを選択するには要素
  • 使用getComputedStyle
  • コレクション上の使用の Array#filter styleを持つ要素のみの要素
  • 戻るに関連付けられているすべてのスタイルを取得する!== none

var liElems = document.querySelectorAll('.newSearchResultsList li'); 
 
var filtered = [].filter.call(liElems, function(el) { 
 
    var style = window.getComputedStyle(el); 
 
    return (style.display !== 'none') 
 
}); 
 
console.log(filtered);
<ul class="newSearchResultsList"> 
 
    <li style="display:none;"> 
 
    <a href="https://www.example.com/dogs/cats/"> 
 
     <img class="is-loading" width="184" height="245"> 
 
    </a><span>dogscats</span> 
 
    </li> 
 
    <li> 
 
    <a href="https://www.example.com/dogs/cats/"> 
 
     <img class="is-loading" width="184" height="245"> 
 
    </a><span>Visible</span> 
 
    </li> 
 
</ul>

関連する問題