【问题标题】:What does the second argument to $() mean?$() 的第二个参数是什么意思?
【发布时间】:2011-10-22 04:30:03
【问题描述】:

我有一个jQuery代码如下;

var favorites       = $("#favorites");
var favoritesFooter = $("#favoritesFooter",favorites);

我不确定第二条语句$("#favoritesFooter",favorites);中的逗号是什么意思

在上述情况下,以下语句将做什么或代表什么;

favoritesFooter.prev().after(newHTML);

【问题讨论】:

  • 问题标题太笼统了!请考虑在未来使用更具体的。为你解决这个问题
  • 感谢更正标题...实际上我想不出标题的正确词,所以添加了通用标题..但无论如何,谢谢:)

标签: javascript jquery html dom jquery-selectors


【解决方案1】:

这是$() 的第二个参数。如documentation 中所述:

选择器上下文

默认情况下,选择器从文档根目录开始在 DOM 中执行搜索。但是,可以使用 $() 函数的可选第二个参数为搜索提供替代上下文。例如,要在事件处理程序中进行搜索,可以像这样限制搜索:

$('div.foo').click(function() {
  $('span', this).addClass('bar');
});

当对 span 选择器的搜索被限制在 this 的上下文中时,只有被点击的元素内的 span 才会获得额外的类。

在内部,选择器上下文是用 .find() 方法实现的,所以 $('span', this) 等价于 $(this).find('span')。

【讨论】:

    【解决方案2】:

    第二条语句的意思是“在jQuery对象favorites中搜索ID为favoritesFooter的元素”。

    当您处理应该是唯一的 ID 时,这毫无意义 - $("#favoritesFooter") 是最佳做法。

    关于favoritesFooter.prev() 这也是没有意义的,假设ID 是唯一的,所以你的集合只有一个元素,因此prev() 将返回空的jQuery 集合。

    .prev() 将采用前一个 DOM 元素 - 在您的情况下,它将在 favoritesFooter 元素之前推送 newHTML

    【讨论】:

    • .prev() 可以正常工作,因为它只是获取前一个 dom 元素,原始选择器无关紧要。
    • 谢谢@Richard 我已经编辑了我的答案。希望这次是正确的!
    • 关闭,prev 不会对 jQuery 集合进行任何类型的导航。它返回直接在当前集合中的每个元素之前的兄弟元素的新集合。所以在这种情况下,favoritesFooter.prev().after(newHTML); 应该与favoritesFooter.before(newHTML); 完全相同。假设在 favoritesFooter 之前有一个元素。
    • @Shadow Wizard :您说“.prev() 将首先搜索 jQuery 集合中的前一个元素” ....所以它需要 jQuery 对象路由和 DOM 路由...你能确认一下吗?
    • .after() 将在特定元素之后插入内容 - 我猜你的意思是问.next()?在这种情况下,它与.prev() 相同,因此表示下一个 DOM 元素或“取下一个兄弟”。
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多