什么是jQuery选择“背景”?(What is “context” in jQuery selec

2019-09-02 03:55发布

是否有任何区别

$('input.current_title', '#storePreferences').prop('disabled', false);

$('#storePreferences input.current_title').prop('disabled', false);

Answer 1:

是有区别的,并且不作为微妙别人相信。

编辑:每一个普通人的例子:

  • 称它是该市(上下文)所有蓝色的房子,如果Jane是存在的,提示了她的帽子。
  • 调用所有城里的建筑物(无上下文还)。 如果它是一个蓝色的房子(添加上下文)和简是存在的,提示了她的帽子。

让我们来打破它选择。

首先,我们必须:上下文选择 http://api.jquery.com/jQuery/#jQuery-selector-context

$('input.current_title', '#storePreferences').prop('disabled', false);

这是说:在上下文中使用选择。 http://api.jquery.com/jQuery/#jQuery-selector-context

虽然这种形式可能会奏效,它应该是:

$('input.current_title', $('#storePreferences')).prop('disabled', false);

要么

var myContext = $('#storePreferences');
$('input.current_title', myContext).prop('disabled', false);

这满足被满足的上下文选择器的要求:“DOM元素,文档,或jQuery来作为上下文中使用”。

这是说:在使用范围内,发现里面的选择。 等效是:

$('#storePreferences').find('input.current_title').prop('disabled', false);

这就是内部发生。 查找'#storePreferences' ,并在发现所有的'input.current_title'匹配的元素。


然后我们有:后代选择

$('#storePreferences input.current_title').prop('disabled', false);

这是后代选择(“祖先的后裔”) http://api.jquery.com/descendant-selector/它说:找到所有input.current_title内部元素#storePreferences元素。 这是它得到棘手! - 这正是它 -

查找所有input.current_title (任意位置),然后寻找那些内部的#storePreferences元件

因此,我们碰上jQuerys'向左选择权灒 - 所以它最初发现更多(可能)比它需要这可能是一个性能命中/问题。

因此的形式:

$('#storePreferences').find('input.current_title').prop('disabled', false);

最有可能表现得比后代更好的版本。



Answer 2:

是否有任何区别$('input.current_title', '#storePreferences').prop('disabled', false);$('#storePreferences input.current_title').prop('disabled', false);

是的,但它是微妙

所不同的是在元素是如何选择。

$('input.current_title', '#storePreferences');

相当于1:

$('#storePreferences').find('input.current_title');

等同于:

$('#storePreferences input.current_title');

即使相同的元素会受到影响。

他们是不一样的原因是,使用find允许范围内返回到#storePreferencesend被调用。

1:线194-202在jQuery的v1.9.1的源
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
    return ( context || rootjQuery ).find( selector );

// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
    return this.constructor( context ).find( selector );
}

在你的问题的情况下,相同的元素将被修改,所以在功能上没有区别,但要知道你用选择的广泛影响的是很重要的。



文章来源: What is “context” in jQuery selector?