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