jQuery中的DOM选择

Posted

技术标签:

【中文标题】jQuery中的DOM选择【英文标题】:DOM selection in jquery 【发布时间】:2010-11-01 19:02:37 【问题描述】:

我有一张桌子,我做了排序。它的执行时间不好。我猜这是因为 DOM 操作。 /* 我正在转换为数组 */

var rows = $table.find('tbody > tr').get(); 


 $.each(rows, function(index, row)     /*then again to 2D array */

            if(($(row).children('td').eq(0).attr('class').indexOf('collapse') != -1 || $(row).children('td').eq(0).attr('class').indexOf('expand') != -1)) 
                myData.push(myData1);
                myData1 = [];
            
                myData1.push(row);  
                rowCount++;
                if(rowCount == $(rows).length) // to assign last group of rows
                myData.push(myData1);
                    myData1 = [];

            
   );

这是直接通过数组选择DOM元素的最佳方式。因为我用了很多次。

【问题讨论】:

请勿转发:***.com/questions/974435/… 【参考方案1】:

嗯,您可以立即做一件事,这可能会提高性能:

你看到你必须得到该行的第一个<td> 的类值的长链了吗?你正在做完全相同的,长链,链两次。试试

// then again to 2D array
$.each(rows, function(index, row) 
    var classes = $(row).children('td').eq(0).attr('class')
    if((classes.indexOf('collapse') != -1 || classes.indexOf('expand') != -1)) 
        myData.push(myData1);
        myData1 = [];
    
    myData1.push(row);
    rowCount++;
    if(rowCount == $(rows).length) // to assign last group of rows
        myData.push(myData1);
        myData1 = [];
    
);

如果$.each() 函数运行很多次,这应该至少可以为您节省一些。

【讨论】:

谢谢 Tomas,有没有 $.each() 的替代函数 很难说是否有,不知道你实际上想要完成什么。也请参阅 Adrian 的建议 - 如果您同时实现这两个功能,性能是否足够好?【参考方案2】:

您也可以尝试使用 hasClass 函数,并使用 :first 选择器而不是返回所有 tds 然后只取第一个:

if( ($(row).children('td:first').hasClass('collapse')) || ($(row).children('td:first').hasClass('expand'))

【讨论】:

以上是关于jQuery中的DOM选择的主要内容,如果未能解决你的问题,请参考以下文章

锋利的jQuery ——jQuery中的DOM操作

jQuery 中的 DOM 选择器,用于没有 ID 或 CLASS 名称标签的元素

在jQuery的XML文档中选择和操作DOM中的元素?

jquery经典题型总结

jQuery 基础总结

JQuery中的id选择器含有特殊字符时,不能选中dom元素