JQuery-重新排列对象-最短代码解决方案

JQuery-重新排列对象-最短代码解决方案,jquery,html,arrays,object,Jquery,Html,Arrays,Object,我只是想知道是否有更好的方法来编写下面的代码?注:以下工程100%罚款 目前,这将创建一个对象数组。我把它们叫做物体。我可以更好地说。注:请纠正我-渴望学习 然后它循环遍历它们,隐藏所有并仅显示那些具有类”的。ContactsBodyMaidPlayMemberUsernameH2'(下面有许多子项)与“sortText”中的文本/字符串匹配 var contactsMemberArray = $('#contactsMainWrapperDIV').children()

我只是想知道是否有更好的方法来编写下面的代码?注:以下工程100%罚款

目前,这将创建一个对象数组。我把它们叫做物体。我可以更好地说。注:请纠正我-渴望学习

然后它循环遍历它们,隐藏所有并仅显示那些具有类
”的。ContactsBodyMaidPlayMemberUsernameH2'
(下面有许多子项)与“
sortText
”中的文本/字符串匹配

var contactsMemberArray = $('#contactsMainWrapperDIV').children()
                           .map(function() {return $(this);}).get();
$.each(contactsMemberArray, function() {
    $(this).hide();
    var username = $('.contactsBodyMainDisplayMemberUserNameH2', this).text();
    if(username != '' && username.toLowerCase().indexOf(sortText.toLowerCase()) >= 0) {
        $(this).show();
    }
});
  • 有没有更快的方法
  • 我需要先映射对象,还是只需对它们进行排序

您的代码看起来不错!您可以将第一行简化为:

var contactsMemberArray = $('#contactsMainWrapperDIV').children()
这应该还可以。由返回的jQuery对象将包含一个包含子元素的数组,每个子元素都是围绕DOM元素的jQuery包装器,可以直接传递给$.each

通常在jQuery中,在“jQuery空间”中工作是可以的,并且很少需要调用
get()
从jQuery对象获取DOM元素。您可以调用jQuery来获取单个DOM元素或DOM元素数组的包装器。这意味着您有时可以在不使用
$的情况下进行操作。每个
循环。例如,要只执行代码的
.hide()
部分,可以执行以下操作:

$('#contactsMainWrapperDIV').children().hide()
这将创建一个jQuery对象,其数组包含所有子对象并隐藏所有子对象

但是对于比较子循环和sortText的逻辑,我认为您的$。每个循环都很好

一个非常小的优化是将
sortText.toLowerCase()
移出循环,因此只需执行一次,而不是循环的每一次

我已经更新了您的小提琴,以显示以下提示:

您可以将其重写为更像jQuery的一行程序。我不一定喜欢这些,因为它们的阅读和维护会变得非常复杂,但它们确实可以帮助您了解如何链接jQuery命令。根据小提琴中的HTML,我们可以获取子数组,隐藏所有内容,然后根据sortText筛选数组,然后显示剩余内容:

var sortText = 'ee'
var sortTextLower = sortText.toLowerCase()
$(".contactsBodyMainDisplayMemberContainerDIV")
    .hide()
    .filter(function(idx, child) {
        return $(child).find('.contactsBodyMainDisplayMemberUserNameH2')
                    .text().toLowerCase().indexOf(sortTextLower) >= 0
    })
    .show()  


希望这能对你有所帮助,如果你有更多的问题,大声说出来。

你可以这样做

var contactsMemberArray = $('#contactsMainWrapperDIV').children().hide();
$.each(contactsMemberArray, function() {
    var username = $(this).find('.contactsBodyMainDisplayMemberUserNameH2').text();
    if(username !== '' && username.toLowerCase().indexOf(sortText.toLowerCase()) >= 0) {
        $(this).show();
    }
});

这是一个较短的版本。还有更多

编辑 我想说这更简单一点:

$(function () {
    var sortText = 'ee';
    $('#contactsMainWrapperDIV > *:not(:contains(' + sortText + '))').hide();
});

你好,问得好。不过,如果你把它放到一个jsfiddle中,让人们更容易提供帮助,那就更好了。我知道你不会失望的P
$(function () {
    var sortText = 'ee';
    $('#contactsMainWrapperDIV > *:not(:contains(' + sortText + '))').hide();
});