我有一个赞按钮。它显示在事件提要的每个元素上。我最近还添加了点赞评论的功能。需要一些帮助调整 ajax 来处理这个问题。我目前抓取最近的 .feeditem
并获取 id,该 id 被格式化为具有元素的 ID。
评论显示在相同的 .feeditem
div 中,因此单击“喜欢”会执行相同的代码,但不会保存正确的信息。有没有办法让它首先检查其中一个父 div id 是否以 activity-comment-
开头,如果是,让它选择不同的 div,如果它不在那个父 id 中,选择默认值(下方)?
或者如果您有更好的方法来实现这一点,请提出建议。 AJAX 较新,因此这可能不是最有效的方法。
$likeButton.click(function (event) {
event.preventDefault();
var $itemClicked = $(this)
**//START SELECT**
var liking_user_id = $itemClicked.closest('.feeditem').attr('data-member').match(/\d+/);
var activity_id = $itemClicked.closest('.feeditem').attr('id').match(/\d+/);
**//END SELECT**
var data = {
'action': 'save_like',
'activity_id': activity_id,
'liking_user_id': liking_user_id
}
$.ajax({
type: 'post',
url: ms_user_actions.ajaxurl,
data: data,
success: function (response) {
if (!response.success) {
}
if (response.data.like == true) {
$itemClicked.siblings('.feedBox_Likes').text('You Like This!');
$itemClicked.html('Unlike').attr("like", "unlike");
}
if (response.data.unlike == true) {
$itemClicked.html('Like').attr("unlike", "like");
}
}
});
});
最佳答案
由于问题中没有 HTML,因此必须在这里做出一些假设。特别是,我假设你想要 liking_user_id
和 activity_id
在这两种情况下,这两个值都是以相同的方式从相关容器节点 (div) 中读取的。
如果这些假设是有效的,那么最简单的方法可能是设计另一个类名(例如“likeContainer”)并将其应用于外部 (feeditem) 容器和每个内部评论容器。这个类名将附加到任何现有的类名,例如 <div class="feeditem likeContainer">
jQuery 将如下所示:
var liking_user_id = $itemClicked.closest('.likeContainer').attr('data-member').match(/\d+/);
var activity_id = $itemClicked.closest('.likeContainer').attr('id').match(/\d+/);
因此,
- 当评论的“赞”被点击时,
.closest()
会找到一个内部评论容器 - 当点击非评论的“赞”时,
.closest()
会找到一个外部的 feeditem 容器。
如果假设不成立,那么您可以考虑以不同方式构建外部和内部 div。这可能是阻力最小的路线。
关于javascript - 发布前的 ajax 条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889522/