非常简单的jQuery扰流器功能一半工作

时间:2014-09-08 10:58:45

标签: javascript jquery html

我使用以下代码实现了真正的简单jQuery扰码程序功能:

HTML:

<a href="" onclick="return false" class="spoiler" content="spoiled content">
    Reveal spoiler
</a>


jQuery / Javascript:

$('a.spoiler').click(function(){
    $text = "<a href=\"\" onclick=\"return false\" class=\"spoiler\" content=\"" + $(this).text() + "\">" + $(this).attr("content") + "</a>"; 
    $(this).replaceWith($text);
});


基本上,我只想让剧透的内容属性与标签之间的文本交换。它适用于第一次单击,但再次单击时不会换回。

有没有办法让我以无限期交换内容的方式实现这一点?

谢谢!

4 个答案:

答案 0 :(得分:3)

只需使用

$('a.spoiler').click(function(){
    var text = $(this).text(); 
    var content = $(this).attr("content");
    $(this).text(content).attr("content", text)
});

DEMO

否则,您需要使用Event Delegation委托事件方法.on(),因为您正在使用replaceWith删除elemnent以及绑定了哪个事件。

$(document).on('click','a.spoiler',function(){
    $text = "<a href=\"\" onclick=\"return false\" class=\"spoiler\" content=\"" + $(this).text() + "\">" + $(this).attr("content") + "</a>"; 
    $(this).replaceWith($text);
});

DEMO

答案 1 :(得分:2)

您可以使用此

$('a.spoiler').click(function () {
    $(this).text(function (_, t) {
        return t.trim() == "Reveal spoiler" ? $(this).attr('content') : "Reveal spoiler";
    });
});

DEMO

答案 2 :(得分:1)

将您的代码更改为 -

$(document).on('click','a.spoiler',function(){
    $text = "<a href=\"\" onclick=\"return false\" class=\"spoiler\" content=\"" + $(this).text() + "\">" + $(this).attr("content") + "</a>"; 
    $(this).replaceWith($text);
});

如果将新HTML注入页面,请使用委派事件附加事件处理程序

修改 -

DEMO

答案 3 :(得分:0)

$('a.spoiler').click(function(){
    $text =  $(this).attr("content")
    $(this).attr("content",$(this).text()).text($text);
});