jquery $.each给我返回一个没有hasClass方法的对象

6

我正在尝试迭代一个具有类名为required的项目集合。我认为我一定在错误地使用了$.each函数。

function required(address) {
    //object to hold elements not passing validation tests
    var pass = true;
    $('.required').each(function(index, elem){
        console.log(elem);
        //check if it has the class indicating it is an email
        if (elem.hasClass('re')) {
            var validEmail = validateEmail(address.email);
            if (!validEmail){
                $(this).addClass('nv'); 
            }

        }
      });
  }

我发现控制台中的元素是<input type=​"text" id=​"name_input" class=​"pr required">​
然后又出现了错误:Uncaught TypeError: Object #<HTMLInputElement> has no method 'hasClass'
这个对象为什么没有hasClass方法呢?

2
难道不应该是 $(elem).hasClass('..') 吗? - Barry Chapman
3个回答

10

你的第一个提示是该对象是一个 #<HTMLInputElement>,而不是 jQuery 对象。使用 $(elem).hasClass('re');


啊哈,是的。既然我看到了它,那就相当明显了。为什么jQuery不会返回一个jQuery对象呢?非常感谢! - 1252748
因为您正在迭代DOM元素,所以它将返回一个DOM元素。您需要从该DOM元素创建一个jQuery对象 :) - Barry Chapman

2

elem 在你的代码中是一个DOM元素对象,如果你想使用jQuery方法,你应该先创建一个jQuery对象:

if ($(elem).hasClass('re')) {

1

你可以将类名.re添加到jQuery选择器中,并保存if/then语句:

function required(address)
{
    //object to hold elements not passing validation tests
    var pass = true;
    $('.required.re').each(function(index, elem) {
        console.log(elem);
        var validEmail = validateEmail(address.email);
        if (!validEmail){
            $(this).addClass('nv'); 
        }
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接