Как это работает
Позволяет использовать этот HTML для примеров:
<div id="container">
<div class="column"><a href="#">Link 1</a></div>
<div class="column"><a href="#">Link 2</a></div>
</div>
<div id="footer">
<a href="#">Link 3</a><a href="#">Link 3</a>
</div>
Параметр scoping функции jQuery следует использовать только в том случае, если у вас уже есть кэшированная ссылка на элемент DOM или набор обернутых элементов jQuery:
var $set = $('#container');
$('a', $set).hide(); // Hides all 'a' tag descendants of #container
Или в случае:
$("#container").click(function(e){
$('a', this).hide(); // Same as call above
}
Но нет смысла использовать его так:
$('a', '#container').hide()
Когда это должно быть написано так:
$('#container a').hide();
Сказав все это, обычно все яснее и яснее просто использовать .find()
вместо использования второго параметра в функции jQuery, если у вас уже есть элемент jQuery или DOM. Первый пример, который я привел, будет написан так:
var $set = $('#container');
$set.find('a').hide(); // Hides all 'a' tag descendants of #container
Если этот единственный вызов был единственной причиной, по которой вы захватили объект #container
, вы также можете написать его таким образом, поскольку он все еще будет ограничивать поиск элементом #container
:
$("#container a").hide(); // This is the same as $('a', "#container");
Зачем вам выбор? 1030 *
Когда jQuery ищет селектор с незаданной областью, он ищет весь документ. В зависимости от сложности селектора, это может потребовать много поиска. Если вы знаете, что искомый элемент встречается только внутри определенного родителя, он действительно ускорит ваш код, чтобы охватить выделение этим родителем.
Независимо от того, какой метод определения области действия вы выберете, вы всегда должны использовать селекторы всегда, когда это возможно.