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