问题描述
|
我有以下jQuery代码:
$(\'.save\').submit(function(e){
var formElement = $(this);
var data = \'id=\' + $(this).attr(\'name\') + \'&\' + $(this).serialize();
var messageBox = $(this).next(\'.message\');
messageBox.html(\'<div class=\"pending\">Saving... please wait...</div>\');
$.post(\'save.PHP\',data,function(response) {
messageBox.html(response);
if(response.indexOf(\'success\') != -1) {
alert(formElement.closest(\'li\').html());
}
});
e.preventDefault();
});
这是它可以使用的HTML:
<ul class=\"entries\">
<li id=\"id8673\" class=\"3\">
<div class=\"expand\">
<div class=\"name\">...</div>
</div>
<div class=\"entry\">
<div class=\"description\">...</div>
<form action=\"index.PHP.\" method=\"post\" name=\"rate8673\" class=\"save\">
<div class=\"comments\">...</div>
<div class=\"controls\">...</div>
</form>
<div class=\"message\">
<div class=\"success\"></div> // Added by jQuery after form submission
</div>
</div>
</li>
</ul>
当提交“ 2”时,哪个会发出警报:
<div class=\"expand\">
<div class=\"name\">...</div>
</div>
<div class=\"entry\">
<div class=\"description\">...</div>
</div>
如果我将jQuery代码更新为:
...
alert(formElement.closest(\'li .entry\').html());
...
它按预期发出警报:
<div class=\"description\">...</div>
但是,如果我将jQuery代码更新为:
...
alert(formElement.closest(\'li .expand\').html());
...
它警告:
NULL
它应该警告这一点:
<div class=\"name\">...</div>
我不知道为什么要NULL
?除此功能外,我已经删除了所有JavaScript,并且页面加载后所有HTML元素都立即可用,那么我在这里遗漏了什么? NULL
是什么,它是从哪里得到的?
解决方法
http://api.jquery.com/closest
根据jQuery文档,“ 11”仅显示祖先。而且div.name并不是该格式的直接祖先(它更像是一个叔叔,但是没有一个选择器可用于父级的同级)。
您可以使用:
alert(formElement.parents(\'li\').find(\'.expand\').html());