gpt4 book ai didi

javascript - .replaceWith() 只工作一次

转载 作者:可可西里 更新时间:2023-11-01 02:18:16 25 4
gpt4 key购买 nike

我正在尝试在我的站点中实现用户信誉系统。因此,您可以在用户每次互动时(例如,每次他发表评论时)看到用户姓名后面的代表编号。还有一个投票系统也会改变用户的声誉,我希望代表编号能够反射(reflect)这种变化。所以我通过 ajax 调用一个文件,它返回该用户的新代表号。 html/php 文件是这样的第一个实例(如果他发帖):

echo '<div class="rep_user_id" id="rep_user_id_'.$posts_row['userid'].'"> '.$posts_row['user_rep'].'</div>';

然后(如果他发表评论):

echo '<div class="rep_user_id" id="rep_user_id_'.$com_row['userid'].'">'.$com_row['user_rep'].'</div>';

都给我这个:

<div class="rep_user_id" id="rep_user_id_110">293</div>

然后是js:

function change_reps() {
var userid = $('.rep_user_id').attr('id').replace('rep_user_id_','');
$.ajax({
url: "vote/get_reputation.php",
data: "userid="+userid,
success: function(server_response){
$("body").ajaxComplete(function(event, request){
var reputation = server_response;
$('#rep_user_id_'+userid).replaceWith(''+reputation);
$('#rep_user_id_'+userid).effect("highlight", {color:'red'}, 1000);
}); } }); }

此函数在另一个 ajax 成功后调用(以更新代表和投票)。因此,从这里开始,什么是有效的:一旦我单击向上或向下的任何箭头,我可以看到投票计数器向上或向下但我只看到用户代表仅在第一个实例(发布)中更改。为什么它只改变一次而不是整个文档?从另一个文件(包含)调用评论部分有什么关系吗?仅供引用,效果在所有情况下都有效!希望你能帮忙。谢谢

编辑: 因为我发现我没有很好地解释自己,所以我添加了更多行。问题是我不能一次修改具有相同 id 和类的多个元素(而不是多次更改一个元素)。所以我在整个页面中有很多次 293 但发布的代码只改变了一个元素!这就是触发 change_reps() 的原因:

$("body").on("click", ".vote_com_up", function(){
var com_id = $(this).attr('id').replace('vote_com_up_','');
$.ajax({
url: "vote/comment_vote.php",
data: "com_action=2&com_id="+com_id,
success: function(server_response){
$(".vote_com_number").ajaxComplete(function(event, request){
if(server_response == 'voted')
{ alert("Ya has votado en este post!");}
else{
var new_com_votes = server_response;
$("#vote_com_number_"+com_id).html(+new_com_votes);
} }); }
}).done(function() {
change_reps();
});
return false;
});

我做了一个小的 jsfiddle 来展示我想要的东西:

http://jsfiddle.net/CMgYb/1/

解决方案:Bryan Naegele 是对的:我需要类而不是 ID。

最佳答案

您通过id 访问此元素,然后用新的东西替换它。这将第二次起作用的唯一方法是,如果您替换它的内容与之前的 ID 相同;我猜它不会。

您确定不想使用 html 函数设置此元素的内容吗:

$('#rep_user_id_' + userid).html('' + reputation);

编辑

仔细观察您的 PHP,您似乎已经将其编码为实际替换整个 div。尽管如此,我还是建议不要对 PHP 进行编码以生成正确的元素 ID。考虑精简此 PHP,以便您只发送 div 的内容。然后你可以像上面那样更简单地使用 html

关于javascript - .replaceWith() 只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com