我是jquery的新手并陷入困境,需要专家的帮助。
这是我的代码
for (val in list) {
var result = $.grep(node, function(e){
return e.id === list[val].Id;
});
if (result === 0)
// do something
}
当我尝试传递JSLint时,我收到了此错误
#1 Don't make functions within a loop.
我知道我在jquery grep函数中创建函数的问题 但我被困在如何将我的功能移出循环将循环分配给变量然后调用它。正如我的职责是谈论一个论点e。我试过这样的
var Visible = function (e, list, val) {return e.id === list[val].Id;};
for (val in list) {
var result = $.grep(node, Visible(e, list, val));
}
但现在jslint发出错误
#1 'e' was used before it was defined.
var result = $.grep(node, Visible(e)); // Line 125, Pos 69
// --------------------------------------------- -----------------------
这是数据
node: Array[5]
0: HTMLTableRowElement
1: HTMLTableRowElement
2: HTMLTableRowElement
3: HTMLTableRowElement
list: Array[5]
0: Object
0: "cc"
1: "ss"
Id: "000"
1: Object
2: Object
现在我发现列表中的哪个元素存在html元素。如果对于列表中的任何元素并且htmlelement不存在那么我r =创建一个我正在通过结果=== 0 来检查它 什么可以解决这个问题。任何帮助将不胜感激 谢谢
答案 0 :(得分:2)
当您编写Visible(e)
时,您可以使用参数e
调用函数。这不是你想要的。您希望将函数本身赋予.grep()
。所以尝试修复它:
var result = $.grep(node, Visible);
答案 1 :(得分:0)
您必须将功能传递给$.grep
。但Visible(e, list, val)
正在尝试调用该函数并将返回值传递给$.grep
(true
或false
)。那时,e
尚未定义(它是$.grep
应传递给回调的参数。)
相反,你必须创建一个返回一个执行比较的函数的函数:
function createCallback(id) {
return function(e) {
return e.id === id};
};
}
for (val in list) {
var result = $.grep(node, createCallback(list[val].Id));
}
也就是说,只要在循环的下一次迭代之前调用这些函数,就可以在循环中创建函数,但是JSLint非常挑剔。
更好的解决方案是从数组中删除已存在元素的所有元素:
$.map(list, function() {
return $('#' + this.Id).length === 1 ? null : this;
}).each(function() {
// create and append element here
// e.g.
$('<div />', {id: this.Id}).appendTo('#container');
});
答案 2 :(得分:0)
更简单的方法是简单地创建一个ID选择器并检查它是否存在:
for (val in list) {
if( $('#'+list[val].Id).length){
/* element exists in page*/
}
}
要在node
内查看元素集合,只能使用filter()
方法
var $node=$(node);
for (val in list) {
if( $node.filter('#'+list[val].Id).length){
/* element exists in node*/
}
}
答案 3 :(得分:0)
根本不需要jQuery。只需使用两个循环,并检查您想要的内容:
for (var i=0; i<list.length; i++) {
var found = false;
for (var j=0; j<node.length; j++) {
if(list[i].id == node[j].Id) {
// We have found such element in node!
found = true;
break;
}
}
if(!found) {
// we did not find such element in node
}
}
我建议你理解基本的Javascript循环是如何工作的,只有在那之后才使用jQuery函数来完成这些任务。它会对你有所帮助。