0

我有一个清单,如下所示:

<ul>
  <li class="service-well">
    <div class="service-header"><h1>Service Name</h1></div>
    ... lost of children, and children of children in here.
    <ul class="comments">
      <li class="comment-holder">
          ....This is a comment
      </li>
    </ul>
  </li>
 </ul>

基本上,这是一项服务,人们可以在上面发表评论。当有人发表评论时,评论被发送到数据库,然后通过ajax插入后检索,并附加到:

<ul class="comments">

在我的 ajax 成功中,我想爬上该评论的父母以获取与其相关的服务的名称:

success: function(data) {
  var serviceTitle = $(data).closest('.service-well').find('.service-header').find('h1').text();
  console.log(serviceTitle);
}

现在,如果我在返回数据后在 Chrome 中使用控制台,则此方法有效,但由于某种原因,在查看控制台以获取已记录的服务标题时,我什么也得不到。返回的数据是:

<li class="comment-holder">stuff here</li>

但是,我可以轻松地从返回的 li 数据中过滤和查找选择器,但似乎无法找到它之外的父母。

任何帮助是极大的赞赏。太感谢了!

4

3 回答 3

1

附加后comments试试这个:

var serviceTitle = $('.comments .service-well:last .service-header h1').text();

更新:

var serviceTitle = $(data).find('.service-well:first .service-header h1').text();
于 2013-07-18T19:41:14.710 回答
1
success: function(data) {
    var serviceTitle = $(data)..

在这种情况下,$(data)没有引用当前在 DOM 中的列表项。相反,您正在从 AJAX 请求收到的 HTML 创建一个新的 jQuery 对象。此时,该元素在 DOM 中不存在,因此不能作为遍历的参考点。.closest(..)在这里不合适。

相反,您可能想尝试这样的事情:

var serviceClass = $(data).attr('class');
var serviceTitle = $('.comments').find('.' + serviceClass).closest('.service-well').find('.service-header').find('h1').text();

此后,serviceTitle变量包含正确的“服务标头”。

于 2013-07-18T19:34:57.147 回答
0

我一开始就没有尝试这样做,我觉得很傻。我通过在 ajax 函数之前捕获服务标题解决了我的问题。

于 2013-07-18T20:57:05.697 回答