1

jQueryで

$('html head').length                             // 1

$('html').find('head').length                     // 1

$('html').find('head').filter('html head').length // 1

しかし

$('html').find('html head').length                // 0

なんで?

4

3 に答える 3

1

最初のセレクター$('html head')は find と同じように機能します - <head>HTML の子孫を取得します

HTML──┐ ここから始めて、頭を見つけてください
    頭

2 番目のセレクター$('html').find('head')は html 要素を取得し、すべての子孫<head>要素を検索します

HTML──┐ ここから始めて、頭を見つけてください
    頭

3 番目のセレクター$('html').find('head').filter('html head') は html 要素を取得し、すべての子孫要素を検索します。これにより、返される要素が の子孫であることが保証されている<head>ため、フィルターは本当に無意味です。headhtml$('html').find('head')

HTML──┐ ここから始めて、頭を見つけてください
    頭

機能していない最後のものは、$('html').find('html head')以下の構造を検索しています

HTML──┐ ここから始めて「html head」を探します
    HTML──┐    
         頭
しかし、実際にあなたの構造はこのようなものです
HTML──┐  
    頭

どの html には子孫 html 要素がないため、0 要素が返されます

コレクションに HTML 要素を保持したい場合は、.addBack()を使用できます。

$('html') // get html element
  .find('html head') // find head element
  .addBack() // add back the html element
  // if jQuery 1.7 and lower use .andSelf()
  .length  // this will result in 1 element - the HTML element
于 2013-06-05T14:10:58.020 に答える