jQuery closest()不抓取元素

jQuery closest()不抓取元素,jquery,Jquery,好的。最近的()函数没有正确或根本没有抓取元素,因此类没有被添加到div中。这里出了什么问题 HTML: 它使文本正确地变为空白,但不会更改最近的表单状态div类。。。我甚至尝试了最近的(“.formstatus”),但它仍然无法获取它。 我正在使用验证jQuery插件。 开始键入时,会在输入栏下方添加此HTML: <label for=​"name" generated=​"true" class=​"error valid" style>​​</label>​ 只在

好的。最近的()函数没有正确或根本没有抓取元素,因此类没有被添加到div中。这里出了什么问题

HTML:

它使文本正确地变为空白,但不会更改最近的表单状态div类。。。我甚至尝试了最近的(“.formstatus”),但它仍然无法获取它。 我正在使用验证jQuery插件。 开始键入时,会在输入栏下方添加此HTML:

<label for=​"name" generated=​"true" class=​"error valid" style>​​</label>​
只在dom树中向上移动,不选择同级

你需要

$(label).prev('div.form-status').addClass('success');

取决于您获得的标签变量是否为jQuery选择器

注意,正如我之前所评论的,jQuery和CSS中的类都有一个直接选择器,因此您应该更喜欢
'div.form-status'
,而不是
'div[class=“form status”]。

只在dom树上,而不选择同级

你需要

$(label).prev('div.form-status').addClass('success');

取决于您获得的标签变量是否为jQuery选择器


请注意,正如我之前所评论的,jQuery和CSS中的类都有一个直接选择器,因此您应该更喜欢
'div.form-status'
而不是
'div[class=“form status”]

我已经测试了这个选择器,并且工作得很好:

$('label').text(''); 
$('label').prev('div[class="form-status"]').addClass('success');
// ---------^---------use this if you want to add class to just previous div at 
//--------------------same level
如果要将类添加到同一级别的所有div,请使用此选项

$('label').siblings('div[class="form-status"]').addClass('success');

我已经测试了这一个,并且工作得很好:

$('label').text(''); 
$('label').prev('div[class="form-status"]').addClass('success');
// ---------^---------use this if you want to add class to just previous div at 
//--------------------same level
如果要将类添加到同一级别的所有div,请使用此选项

$('label').siblings('div[class="form-status"]').addClass('success');

问题已经解释了一半,您应该使用
$.prev()
,因为
$.closest()
不看兄弟姐妹

然而,问题的第二部分就在这里

// What type is label? Is it a string indicating what's in the 
// for="name"? Is it a jQuery object? a DOM object
success: function(label) {
    $(label).text('');
    $(label).closest('div[class="form-status"]').addClass('success');
    //label.text('OK!').addClass('valid').closest('.control-group').addClass('success');
}
如果传递给它一个jQuery或HtmleElement对象,那么下面的操作就可以了

如果传递到
表单标签
中的
名称
,则可以使用以下命令

如果是其他原因,您应该改进您的文档,我尤其不能忍受参数没有文档化的函数,我相信这是您感到困惑的原因

关于为什么下面这句话有效

$('label').prev('div.form-status').addClass('success')

这将完成页面上的所有标签,这可能不是您想要的。它仅适用于具有单个标签的示例。您的主要问题是不知道success函数中的对象类型
label

问题已经解释了一半,您应该使用
$.prev()
,因为
$.closest()
不看同级

然而,问题的第二部分就在这里

// What type is label? Is it a string indicating what's in the 
// for="name"? Is it a jQuery object? a DOM object
success: function(label) {
    $(label).text('');
    $(label).closest('div[class="form-status"]').addClass('success');
    //label.text('OK!').addClass('valid').closest('.control-group').addClass('success');
}
如果传递给它一个jQuery或HtmleElement对象,那么下面的操作就可以了

如果传递到
表单标签
中的
名称
,则可以使用以下命令

如果是其他原因,您应该改进您的文档,我尤其不能忍受参数没有文档化的函数,我相信这是您感到困惑的原因

关于为什么下面这句话有效

$('label').prev('div.form-status').addClass('success')

这将完成页面上的所有标签,这可能不是您想要的。它仅适用于具有单个标签的示例。您的主要问题是,您不知道成功函数中的对象类型
标签

您应该删除答案下的注释。另外,最好解释一下
div[class=“form status”]
很容易出错,因为一旦向其中添加新类,它就会失败div@JuanMendes我删除了我的评论,但我认为你对不止一个类的问题已经足够清楚了;)此:$(标签).prev('div.form-status').addClass('success');仍然不起作用。。它没有将该类添加到DIV中。。而且Chrome调试器不会像jQuery出错时通常那样抛出任何错误消息。这一行之前的代码行正常吗?您的标签是否已添加到页面中?标签字符串中有什么?前一行起作用。还有这个:label.text('OK!').addClass('valid')。最近('controlgroup')。addClass('success');这是它附带的默认设置,但我正在尝试改变它的样式。标签已添加到页面中。字符串变为“”,因为我不想要OK!正在显示,这是它附带的默认设置。您应该删除答案下的注释。另外,最好解释一下
div[class=“form status”]
很容易出错,因为一旦向其中添加新类,它就会失败div@JuanMendes我删除了我的评论,但我认为你对不止一个类的问题已经足够清楚了;)此:$(标签).prev('div.form-status').addClass('success');仍然不起作用。。它没有将该类添加到DIV中。。而且Chrome调试器不会像jQuery出错时通常那样抛出任何错误消息。这一行之前的代码行正常吗?您的标签是否已添加到页面中?标签字符串中有什么?前一行起作用。还有这个:label.text('OK!').addClass('valid')。最近('controlgroup')。addClass('success');这是它附带的默认设置,但我正在尝试改变它的样式。标签已添加到页面中。字符串变为“”,因为我不想要OK!显示这是它的默认设置。它对我不起作用。。。它甚至没有改变任何一个以班级的形式出现的DIV…它对我不起作用。。。它甚至不会改变任何作为类的窗体状态的DIV。。。
$('label').prev('div.form-status').addClass('success')