jQuery元素迭代上下文选择器

时间:2012-11-22 08:52:49

标签: javascript jquery html dom iteration

我在jQuery中创建表单验证,但是我遇到了一些问题;

首先,我遍历所有待验证元素并将它们推入数组(我已经尝试了以下所有内容):

1. errorfields.push($("#name"));
2. errorfields.push(document.getElementById("name"));
3. errorfields.push("name");

然后,最后我迭代这些项目并想要添加错误消息。

for(var i = 0; i < errorfields.length; i++){
  1. var parent = errorfields[i];
  2. var parent = $(errorfields[i]);
  3. var parent = $("#" + errorfields[i]);
}

所有这一切都是:

[<input>, context: #document, selector: "#name"]

如果我尝试创建{input}的jQuery对象,它返回的完全相同。

即使我放了一行如下:

console.log($("#name"));

它将使用上下文和选择器返回此数组。可能是什么问题?

顺便说一句,我无法在这个对象上执行jquery函数。这是重点,看到我想添加2px红色边框和$(父).after(“错误消息”);

2 个答案:

答案 0 :(得分:0)

我认为这应该适合你。

errorfields.push( $("#name")[0] );
//Get the html element rather than the jQuery element (an object).

然后在你的for循环中你应该有这样的东西:

var parent = $( errorfields[i] );
//This will get you the jQuery element again.

Here is a quick example using divs to show this.

答案 1 :(得分:0)

$("#name")肯定会返回一个包含所有方法的jQuery对象。在您的日志中,我认为您只注意到owned属性。如果您查找原型链,您将看到所有$.fn方法。如果#name不存在,那么长度将为0

如果要将jQuery对象转换为数组,则应使用.get()[].slice

var array = $('.example').get();

或:

var array = [].slice.call( $('.example') );