无法在jQuery中定位特定选择器

问题描述

| 我有以下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());