我正在阅读一个重写的jQuery代码。我无法理解以下代码。
$('body > *:not(#print-modal):not(script)').clone();
答案 0 :(得分:8)
此选择器匹配以下任何标记:
<body>
print-modal
和<script>
代码。然后使用.clone()
克隆所有这些元素,尽管clone()
d对象没有做任何事情,这很奇怪。
更深入的解释:
body > *
表示“选择<body>
的直接后代的所有元素”,通配符*
选择每个标记。接下来,两个:not()
伪类过滤器会删除标识为print_modal
的元素以及任何<script>
标记。
参考:
答案 1 :(得分:2)
如果我是正确的,在这种情况下,>*
是body
标记的所有子项的选择器,其中:not(#print-modal)
和:not(script)
提供了两个来自选择器的排除项。
答案 2 :(得分:1)
>
表示“直接儿童”。
*
表示“任何标记”。
所以,这就是说找到<script>
的第一级孩子的任何标签(不是id="print-modal"
或<body>
)。
注意:此处不需要*
,因为如果之前没有任何内容,:not
会假设*
。
答案 3 :(得分:0)
它选择身体的直接子项不是脚本标记且没有标识print-modal
的所有元素。
*
表示所有元素。
答案 4 :(得分:0)
$('body > *:not(#print-modal):not(script)').clone();
表示克隆正文的所有直接子元素,但不包含任何标识为print-modal
而不是script
标记的元素。
也可以写成
$('body > *').not('#print-modal, script').clone();
参考: jQuery。