我在使用jQuery删除元素时遇到问题

时间:2010-09-20 18:25:09

标签: php javascript jquery

我正在尝试在成功函数中删除此元素,但它没有这样做!!

jQuery文件:

 $(function () {
        //More Button
        $('.more').live("click", function () {
            var ID = $(this).attr("id");
            if (ID) {
                $("#more" + ID).html('<img src="moreajax.gif" />');
                $.ajax({
                    type: "POST",
                    url: "ajax_more.php",
                    data: "lastmsg=" + ID,
                    cache: false,
                    success: function (html) {
                        $("ul.statuses").append(html);
                      // my problem is here
                        $("#more" + ID).remove();
                    }
                });
            }
            else {
                $(".morebox").html('The End');
            }
            return false;
        });
    });

这是html文件: 这是单击以检索更多结果的按钮!

echo'<div id="more'. $dateTime.'" class="morebox">
    <a href="#" class="more" id="'.$dateTime.'">more</a>';

3 个答案:

答案 0 :(得分:4)

如果您的id中有空格,那就是您的问题。该空格在id属性中有效,但它会混淆您在此处使用的CSS选择器(因为它未正确转义):

$("#more" + ID).remove();

例如,使用您在另一个答案的评论中引用的ID,最终将成为:

$("#more2010-09-20 12:53:43").remove();

...这是一个无效的选择器(我很确定;至少,它不是你正在寻找的选择器)。

最简单的方法可能是确保$dateTime变量的值中没有任何空格。为了更好的衡量,我会避免冒号(:)以及,但我可能只是偏执狂(不,我不是,见下文)。

例如,您可以更改输出这些内容的PHP代码以使用str_replace并看起来像这样(我不是PHP人员,如果有轻微的语法问题,请道歉,但是你得到了要点):

$baseId = str_replace(':', '', str_replace(' ', '_', $dateTime));
echo'<div id="more'. $baseId.'" class="morebox"><a href="#" class="more" id="'.$baseId.'">more</a>';

有关CSS选择器的详细信息:除非您转义某些字符,否则有许多有效的id值无法在CSS选择器中使用。几乎任何内容在id中都有效,但ID you use with a CSS selector必须使用其中的一部分或正确转义:

  

在CSS中,标识符(包括选择器中的元素名称,类和ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A1和更高,加上连字符( - )和下划线(_);它们不能以数字开头,也不能以数字后跟连字符开头。标识符还可以包含转义字符和任何ISO 10646字符作为数字代码(请参阅下一项)。例如,标识符“B&amp; W?”可以写成“B \&amp; W \?”或“B \ 26 W \ 3F”。

答案 1 :(得分:0)

我认为id不会产生你期望的结果,试着看看结果如何:

alert("#more" + ID);

并确保它与您的代码相同:

<a href="#" class="more" id="'.$dateTime.'">more</a>

答案 2 :(得分:-1)

我认为

$("#more" + ID).remove();

应该是

$("#more" + ID).html('');

否则事情就无法正常运作。