jQuery-如何改进此代码

时间:2009-11-25 08:51:20

标签: jquery

我有一个jQuery代码,需要你们的帮助才能提高性能。 HTML:

           <div class="mydiv">
               <div class="indiv">
                 <span>
                  myspan
                    </span>
               <a href="#">
                 a1
                 </a>
              <a href="#">
                a2
                 </a>
                </div>
                <table >
               ..................
             </table>
               </div>

现在我想知道以下内容。 1.现在使用特定范围的tr,我编码像

 var $myrows = $(".mydiv table tr").slice(index);
  $($myrows , this).jQueryFunction()

代码工作正常,但我认为$(“。mydiv table tr”)将使浏览器遍历总DOM,所以我应该去  $(“。mydiv table tr”,this).jQueryfunction()//我认为这样可以提高性能,而不是使用var $ myrows。

我认为第二个是好的。

2. $(“。mydiv .indiv a”,this).click(function(event) 这个点击不起作用,如果我删除它会开始工作。为什么?

3.我必须选择一个特定的tr,因为我正在使用

$(“。mydiv table tr:nth-​​child(特定孩子)”) 有没有更好的方法呢?在这种情况下,它将遍历DOM。 感谢。

1 个答案:

答案 0 :(得分:1)

  1. 使用:gt(3)过滤器来获取集合中索引大于3的所有实例:

    var $ myrows = $(“。mydiv table tr:gt(”(index-1)+“)”)

  2. 它不起作用的原因可能是因为this与你期望的不同。 this,您使用它的方式,需要是您的代码的子集,其中包含与您的选择器匹配的任何内容。例如,如果this不是包含类mydiv元素的节点,则选择器将不返回任何行。这和写作一样

    $(this).find('.mydiv .indiv a');
    

    因此,如果this是您的.mydiv,则需要从选择器中删除该部分。 this完全是另一回事。无论是什么,这都是你的错误来源。找出它是什么,然后你就能找到解决方法。

  3. 你这样做的方式很好。

  4. 修改

    我考虑过回去编辑我之前的观点,但我想我只需要在这里做一个全覆盖的修正案。在所有这些问题中,您要处理的是如何仅通过将context参数作为$参数传递给$(selector, context); 函数来遍历特定的DOM集。在#2中,您的问题是由传递无效的上下文引起的。如果没有看到更多的代码,无效的上下文是什么,以及应该改变什么。在#1和#3中,您只是在寻找有关如何使用context参数的建议。那么,让我在这里发表一些一般性评论。

    语法

    $(context).find(selector);
    

    与调用

    完全相同
    $('.indiv a', $('.mydiv')[0])

    如果能为你解决问题。

    因此$('.mydiv:first').find('.indiv a').mydiv会产生完全相同的结果,并且它们都会同样快速地执行。您指定在DOM中的jqueryFunction的第一个实例中执行搜索。请注意,您将始终遍历整个DOM以查找该元素;但是一旦你这样做了,你的搜索范围就会缩小到那个范围内。所以是的,这通常是一个很好的方式,如果你知道这会给你你想要的结果。

    当然告诉jQuery在特定节点而不是在整个DOM中寻找某些东西,不仅会改变性能,还会改变你的结果集。所以这是否合适取决于你;只有您对代码有足够的了解才能判断这种方法是否适合您。

    如果您想在特定tr内的所有table元素的子集上调用var mySpecificTable = $('.mydiv .indiv .table').eq(0); $(mySpecificTable).find('tr:gt('+(index-1)+')').jqueryFunction(); ,您可以使用

    find

    ...或者您可能希望改写的任何其他方式。请注意,$('table:first')方法适用于 jQuery对象,例如context返回的},$('table')[0]方法适用于 DOM节点例如$('tr:nth-child(3)', myDOMNode)

    返回的那个

    同样的一般想法适用于你的问题#3; $('tr', myDOMNode').eq(3)myQueryObject.find('tr').eq(3)一样好{{1}}等......

    希望能够解决问题。