7

我有一个评论系统,我想在其中实现内联编辑(当有人知道一个好的插件或类似的东西时,请不要犹豫给我一个名字)并找到一个用 textarea 和文本替换文本的 Javascript 片段作为该文本区域的值。

但现在我需要向该文本区域添加一个按钮(提交按钮),以便用户可以保存他编辑的文本。

我的代码现在看起来像

<span id="name">comment</span>

<div onclick="replacetext();">test</div>

<script type="text/javascript">
    function replacetext(){
            $("#name").replaceWith($('<textarea>').attr({ id: 'name', value: $('#name').text() }));
    </script>

我已经对其进行了测试,$("#name").append('<button>yes</button>');但它没有用。

4

4 回答 4

2
function replacetext() {

    $("#name").replaceWith($('<textarea>').attr({
        id: 'name',
        value: $('#name').text()
    }));
   $('#name').after('<button id="test">test</button>');
}

$('#test').live("click",function(){
   alert("I am a newly-created element and .click won't work on me.");

});

您不能在 textarea 中使用 .append() ,因为您不能“插入内容”或附加到它(还有其他解决方法)。您可以在 DIV、段落标签或任何可以充当容器的内容中执行此操作。

http://api.jquery.com/append/
http://api.jquery.com/after/
http://api.jquery.com/live/或 .on() http://api.jquery.com /在/

于 2012-12-02T17:18:11.483 回答
2

可以使用以下 jsFiddle 试用该解决方案:http: //jsfiddle.net/adb8X/5/

我相信你追求的是:

  $('<button>yes</button>').insertAfter("#name");

上面的代码在目标选择器(“#name”)中具有指定 id 的 DOM 元素之后插入一个新创建的 DOM 元素(是)。

更多关于insertAfter这里:http ://api.jquery.com/insertAfter/

如果你想把它插入到replacetext()中,它会变成:

function replacetext() {
    $("#name").replaceWith($('<textarea>').attr({
        id: 'name',
        value: $('#name').text()
    }));

    $('<button>yes</button>').insertAfter("#name");

} 

注意:我还更正了您的 jsFiddle。请在此处查看:http: //jsfiddle.net/adb8X/5/(如果我没记错的话,设置有问题和一个小错字)。其中对应的行是:

 $("#name").append( $('<button>hi</button>') );
于 2012-12-02T17:34:38.653 回答
1

这是工作代码。

<span id="name">comment</span>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<div onclick="replacetext();">test</div>

<script type="text/javascript">
    function replacetext(){
            $("#name").replaceWith($('<textarea>').attr({ id: 'name', value: $('#name').text() }));
            $('#name').after('<input type="submit" />');
    }
    </script>

如果有效,请接受它作为答案

于 2012-12-02T16:54:54.030 回答
1

另一个选项可以让您替换动态生成的标签,而不仅仅是带有静态 id = "Name" 的标签,例如:

此示例中的标签或锚链接的 html 将替换为文本框:

<a href="#" onclick="editOpen(this);">@Html.DisplayFor(modelItem => Model.Name)</a>|

Javascript(editOpen函数内部)

function editOpen(ctrl) {
   //textbox
    var editText = $('<input>').attr({
        type: 'text',
        value: $(ctrl).text()
     });

    //edit button
    var saveEditLink = $('<input>').attr({value:'Save',type:'button'});

    //Put them together
    $(ctrl).replaceWith($(editText).after($(saveEditLink)));

}
于 2012-12-02T18:49:10.773 回答