字符串上的jQuery选择器仅在div包围时才有效

Ran*_*ton 10 jquery

为什么这样做?

$('#findme', '<div><div id="findme">Hello</div></div>')
Run Code Online (Sandbox Code Playgroud)

这不是吗?

$('#findme', '<div id="findme">Hello</div>')
Run Code Online (Sandbox Code Playgroud)

出于某种原因,只有当我有封闭的div时,jQuery才会找到id为findme的div.

即使将其封装在不同的标签中也行不通.

$('#findme', '<html><div id="findme">Hello</div></html>')
Run Code Online (Sandbox Code Playgroud)

另外以下不起作用.

$('<div id="findme">Hello</div>').find('#findme')
$('<html><div id="findme">Hello</div></html>').find('#findme')
Run Code Online (Sandbox Code Playgroud)

虽然这有效.

$('<div><div id="findme">Hello</div></div>').find('#findme')
Run Code Online (Sandbox Code Playgroud)

我不了解上下文的工作原理.

谢谢,兰德尔

Dmi*_*kov 28

实际上很容易.您搜索的方式是使用上下文.因此它需要字符串中最顶层的节点,并搜索它的子节点.

想象一下在html中使用相同的结构并解析它:

$('#findme', '<div><div id="findme"></div></div>')
Run Code Online (Sandbox Code Playgroud)

是相同的

$('div').find('#findme')
Run Code Online (Sandbox Code Playgroud)

要么

$('div').children('#findme')
Run Code Online (Sandbox Code Playgroud)

所以,当你尝试

$('<div id="findme"></div>').find('#findme')
Run Code Online (Sandbox Code Playgroud)

它显然没有孩子.

  • 我相信你的例子中不是".findme"而是"#findme".除此之外,确实做了很好的解释 (2认同)