我试图通过用具有相同内容的文本区域替换段落来做到这一点。

function edit() {
    var wdith = $("p").css('width')
    $("p:first").replaceWith("<textarea class='edit'>" + $("p:first").text() + "</textarea>")
    $(".edit").css("width", wdith)
}
$("#replace").click(edit);

Demo

但是它不能正常工作。文本前后有空格。
我如何解决它?

最佳答案

您的脚本正在按照 jar 上的指示执行。您正在获取空格,因为<p>标记内有空格和换行符。

要删除文本格式,请尝试以下操作:http://jsfiddle.net/z9xCm/18/

function edit() {
    var wdith = $("p").css('width');
    var p = $("p:first");
    var t = p.text().replace("\n", "").replace(/\s{2,}/g, " ").trim();
    p.replaceWith("<textarea class='edit'>" + t + "</textarea>")
    $(".edit").css("width", wdith)
}
$("#replace").click(edit);

首先,我们删除换行符,然后删除多个重复的空格,然后在文本的开头和结尾处 trim 空格。

有点偏离主题,但也可以重写为:http://jsfiddle.net/z9xCm/52/
$("#replace").click(function() {
    var p = $("p:first");
    p.replaceWith($("<textarea/>", {
        "class": "edit",
        "text": p.text().replace("\n", "").replace(/\s{2,}/g, " ").trim(),
        "css": { "width": p.css('width') }
    }));
});

这是同一件事,但是形式更简洁,更注释。
$("#replace").click(function() { /* assign anonymous function to click event */

    var p = $("p:first"); /* store reference to <p> element */

    /* get p.text() without the formatting */
    var t = p.text().replace("\n", "").replace(/\s{2,}/g, " ").trim();

    /* create new textarea element with additional attributes */
    var ta = $("<textarea/>", {
        "class": "edit",
        "text": t,
        "css": {
            "width": p.css('width')
        }
    });

    p.replaceWith(ta); /* replace p with ta */
});

注意,用于创建具有属性的新元素的 $("...", {...}) syntax只是introduced in jquery 1.4

09-25 19:11