Is there any difference between
$('input.current_title', '#storePreferences').prop('disabled', false);
and
$('#storePreferences input.current_title').prop('disabled', false);
?
The context property contains the original context passed to jQuery, which could be a DOM node context, or, if no node is passed, the document context.
jQuery selectors allow you to select and manipulate HTML element(s). jQuery selectors are used to "find" (or select) HTML elements based on their name, id, classes, types, attributes, values of attributes and much more. It's based on the existing CSS Selectors, and in addition, it has some own custom selectors.
A function of that nature can be called at any time, anywhere. jQuery (a library built on Javascript) has built in functions that generally required the DOM to be fully rendered before being called. The syntax for when this is completed is: $(document). ready(function() { });
The jQuery Object: The Wrapped Set: Selectors return a jQuery object known as the "wrapped set," which is an array-like structure that contains all the selected DOM elements. You can iterate over the wrapped set like an array or access individual elements via the indexer ($(sel)[0] for example).
There IS a difference, and it is NOT subtle as others believe.
EDIT: Layman's example of each:
Let's break down what it selects.
First we have: Context selector http://api.jquery.com/jQuery/#jQuery-selector-context
$('input.current_title', '#storePreferences').prop('disabled', false);
This says: use a selector in context. http://api.jquery.com/jQuery/#jQuery-selector-context
While this form MIGHT work, it should really be:
$('input.current_title', $('#storePreferences')).prop('disabled', false);
OR
var myContext = $('#storePreferences');
$('input.current_title', myContext).prop('disabled', false);
This meets the requirement for a context selector being met: "A DOM Element, Document, or jQuery to use as context".
This says: using the context, find inside that the selector. An equivalent would be:
$('#storePreferences').find('input.current_title').prop('disabled', false);
Which is what happens internally. Find '#storePreferences'
and in that find all the 'input.current_title'
matching elements.
Then we have: Descendant Selector
$('#storePreferences input.current_title').prop('disabled', false);
This is a Descendant Selector (“ancestor descendant”) http://api.jquery.com/descendant-selector/ which says: find all the input.current_title
elements inside the #storePreferences
element. THIS IS WHERE IT GETS TRICKY! - that is EXACTLY what it does -
finds ALL the input.current_title
(anywhere), then finds those INSIDE the #storePreferences
element.
Thus, we run into jQuerys' Sizzle right to left selector - so it initially finds MORE(potentially) than it needs which could be a performance hit/issue.
Thus the form of:
$('#storePreferences').find('input.current_title').prop('disabled', false);
would perform better than the Descendant version most likely.
Is there any difference between
$('input.current_title', '#storePreferences').prop('disabled', false);
and$('#storePreferences input.current_title').prop('disabled', false);
?
The difference is in how the elements are selected.
$('input.current_title', '#storePreferences');
is equivalent to1:
$('#storePreferences').find('input.current_title');
but is not equivalent to:
$('#storePreferences input.current_title');
even though the same elements will be affected.
The reason they're not the same is that using find
allows for the context to be returned to #storePreferences
when end
is called.
// 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 );
}
in the context of your question, the same elements will be modified, so there is no difference in functionality, but it's important to be aware of the broader implications of the selectors you use.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With