您可以围绕一个DOM元素数组或围绕jQuery对象包装$(),但不能围绕jQuery对象数组

时间:2011-11-17 20:19:26

标签: javascript jquery jquery-selectors

不确定如何表达这个问题所以它足够通用。 (并且在我知道我在问什么之后会重新措辞)。问题,我认为处理JQuery .find()函数中的变量。

问题:您可以围绕一个DOM元素数组或围绕jQuery对象包装$(),但不能围绕jQuery对象数组

我现在能做的最好的就是提供一个例子here

前一个小提琴中的问题代码在这里:

////////////////Neither of the following works////////////////
//nodelevel = nodesWithMinuses.find('div.node.level' + levelnumber);
  nodelevel = $(nodesWithMinuses).find('div.node.level' + levelnumber);
////////////////Neither of the previous works////////////////

3 个答案:

答案 0 :(得分:6)

Apparently你可以围绕一个DOM元素数组或jQuery对象包围$(),但不能围绕jQuery对象数组。

尝试更改此行:

var nodeWithMinus = thisplusminus.parent().parent();

到此:

var nodeWithMinus = thisplusminus.parent().parent()[0];

这将提取DOM元素并将nodesWithMinuses转换为DOM元素数组。

答案 1 :(得分:2)

变量nodesWithMinuses是jQuery对象的数组。您不能将jQuery方法应用于除jQuery对象之外的任何其他方法。您有两个选择:要么将nodesWithMinuses声明为jQuery对象,要通过add方法向其添加对象:

var nodesWithMinuses = $();
//...
nodesWithMinuses.add(element);
// instead of nodesWithMinuses.push(element);

找到将数组转换为jQuery对象的方法:

$($.map(nodesWithMinuses,function(el,i){return el.get(0)})).find('div.node.level' + levelnumber);

或遍历数组并一次搜索每个对象中的元素:

var result = $();
$.each(nodesWithMinuses,function(i,el){
    result.add(nodesWithMinuses.find('div.node.level' + levelnumber));
});
console.log(result);

答案 2 :(得分:1)

在你的代码中,nodeWithMinuses是一个数组,但你试图将它包装在jQuery函数中。这对阵列不起作用。在jQuery的find函数中使用变量就可以了。