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

7

因为标签内没有<html>嵌套<html>标签

但:

$('html').find('html, head').length // return 1 here coz comma means 'or'
于 2013-06-05T13:45:48.300 回答
5

根据文档:

查找:获取当前匹配元素集中每个元素的后代,由选择器、jQuery 对象或元素过滤。

HTML不是HTML

http://api.jquery.com/find/

于 2013-06-05T13:46:16.553 回答
1

您的第一个选择器$('html head')就像 find 一样工作 - 获取<head>HTML 的任何后代

HTML──┐从这里开始找头
    头

您的第二个选择器$('html').find('head')获取 html 元素 - 然后找到所有后代<head>元素

HTML──┐从这里开始找头
    头

您的第三个选择器$('html').find('head').filter('html head') 获取 html 元素 - 然后找到所有后代<head>元素 - 过滤器真的毫无意义,因为返回的元素head保证是后代html$('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 回答