0

我不太确定在 jquery 中使用“this”[当前上下文]。我知道的是 - 它阻止 dom 搜索所有元素,它只适用于当前元素,从而提高性能 [纠正我,如果我我错了]。我也不确定什么时候用这个,什么时候不用。可以说,我应该去

  $("span",this).slice(5).css("display", "none")

或者

 $("span").slice(5).css("display", "none")

两者都可以工作,但我不太清楚它是如何工作的。有人可以用一个差异/正确的例子来解释它,什么时候使用什么?[编辑]

      $(function() {
        $("#clickme").click(function() {
            $("span",this).slice(5).css('display', 'block');//doesn't work ? why?
             $("span").slice(5).css('display', 'block');//works..why?

        });
    });
enter code here <span id="clickme">Click me</span>
                 <span>itam1</sapn>
                <span>itam2</sapn>
                <span>itam3</sapn>
                 <span>itam4</sapn>
                    <span>itam5</sapn>
                    ...upto10
4

2 回答 2

0

通常您可以this在事件处理程序上使用关键字,因为它将是对触发事件和其他 jQuery 函数(如$.each.

例如,在处理点击事件时,可以说:

$('.parentElement').click(function () {
  $('.foo', this).hide();
});

上面的代码将隐藏所有具有类的元素,这些元素foo是当前parentElement被点击的后代。

使用 jQuery 函数的 context 参数相当于调用该find方法:

$(expr, context);
// is just equivalent to:
$(content).find(expr);

编辑:看看你的例子:

    $("#clickme").click(function() {
      $("span",this);//... (1)
      $("span");//..       (2)
    });

第一行将查找(其后代)内部的所有span元素,因为该元素是触发事件的元素。#clickmeclick

第二行,将查找整个页面上的所有元素。span

于 2009-11-19T06:57:05.030 回答
0

这个怎么运作

让我们使用这个 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>

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 或 DOM 元素,那么在 jQuery 函数中使用而不是使用第二个参数通常会更简洁明了。我给出的第一个示例将改为这样编写:

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");

你为什么要确定你的选择范围

当 jQuery 寻找一个无范围的选择器时,它会搜索整个文档。根据选择器的复杂性,这可能需要大量搜索。如果您知道要查找的元素仅出现在特定的父级中,它将真正加快您的代码将选择范围限定为该父级。

无论您选择何种范围界定方法,您都应始终尽可能地界定您的选择器。

于 2009-11-19T07:04:46.153 回答