好的.closest()函数没有正确地抓取元素或AT ALL所以没有将类添加到div中。这有什么不对?
HTML:
<div class="half control-group">
<div class="form-status"></div>
<?php
echo form_label('Username', 'username');
echo form_input(array('name' => 'username', 'maxlength' => 25, 'value' => set_value('username') ));
?>
</div>
JQuery的:
success: function(label) {
$(label).text('');
$(label).closest('div[class="form-status"]').addClass('success');
//label.text('OK!').addClass('valid').closest('.control-group').addClass('success');
}
它正在使文本正确地变为空白,但它并没有改变最近的形式状态div类...我甚至尝试了最接近('.form-status')它仍然不会抓住它。 我正在使用validate jQuery插件。 当您开始输入时,它会在输入栏下添加此HTML:
<label for="name" generated="true" class="error valid" style></label>
任何人都在寻找正确的答案,这就是:
label.closest('.control-group').find('div.form-status').addClass('success');
答案 0 :(得分:3)
closest只在dom树上,它没有选择兄弟姐妹。
你需要
$(label).prev('div.form-status').addClass('success');
或
$('.half.control-group label').prev('div.form-status').addClass('success');
取决于你获得的标签var是否是jQuery选择器。
请注意,正如我之前评论的那样,jQuery和CSS中的类都有一个直接选择器,所以你应该更喜欢'div.form-status'
而不是'div[class="form-status"]'
。
答案 1 :(得分:0)
我测试了这个并且工作得很好:
$('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');
答案 2 :(得分:0)
已解释了一半问题,您应该使用$.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或HTMLElement对象,则以下内容将起作用http://jsfiddle.net/Rdpu7/1/
success: function(label) {
$(label).prev('div.form-status').addClass('success');
$(label).text('OK!').addClass('valid').closest('.control-group').addClass('success');
}
如果传递给name
的{{1}},则可以使用以下http://jsfiddle.net/Rdpu7/3/
form_label
如果它是其他的东西,你应该改进你的文档,我特别不能忍受没有记录参数的功能,而且我确定这是你混淆的原因。
关于以下行的原因
success: function(label) {
var label = $("label[for='"+label+"']");
label.prev('div.form-status').addClass('success');
label.text('OK!').addClass('valid').closest('.control-group').addClass('success');
}
这将完成您网页上的所有标签,这可能不是您想要的。它仅适用于带有单个标签的示例。您的主要问题是您不知道成功函数中的对象$('label').prev('div.form-status').addClass('success')
是什么类型