不应该保留文本区域数据吗?

发布于 2024-12-09 04:15:57 字数 703 浏览 0 评论 0原文

我在表单中有一个textarea

<form action="#" id="container">
  <textarea id="txt" cols="100" rows="5">Good bye</textarea>
</form>

我想要的就是用div替换这个表单

$("#container").replaceWith(function() {
    return "<div>" + $(this).html() + "</div>";
});

这有效没有任何问题,但是如果我在使用 replaceWith 方法之前更改 textarea 值:

$("#txt").val("hello world");

最终内容是 div 内的 textarea ,其中包含“再见”文本,而不是预期的“你好世界”。您有一个演示

为什么会发生这种情况?如何用保留文本区域内容的 div 替换 form

I have a textarea inside a form:

<form action="#" id="container">
  <textarea id="txt" cols="100" rows="5">Good bye</textarea>
</form>

All I want is to replace this form by a div:

$("#container").replaceWith(function() {
    return "<div>" + $(this).html() + "</div>";
});

That works without any problem, but if I before to use the replaceWith method change the textarea value:

$("#txt").val("hello world");

The final content is a textarea inside the div with the "Good bye" text, not the "hello world" as expected. You have a demo here.

Why is this happening? How can I replace the form by a div preserving textarea contents?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

叹梦 2024-12-16 04:15:57

.val() 正在更改文本区域的值(意味着提交表单时发送的数据),不一定是其内部文本/HTML.. 为此,请使用 .html() 相反:

$("#txt").html("hello world"); 

更新了 jsFiddle

The .val() is changing the value of the textarea (meaning the data sent when form is submitted), not necessarily its inner text/HTML.. to do so use .html() instead:

$("#txt").html("hello world"); 

Updated jsFiddle.

何处潇湘 2024-12-16 04:15:57

这有效:

$("#txt").val("hello world");
$("#container").replaceWith(function() {
    return $('<div />').append($(this).contents());
});

问题是用 .html() 序列化 html 时出现的.使用 DOM 节点工作要好得多。这也将保留事件处理程序。


这是另一种方法:

$('#container').wrapInner('<div/>').children().unwrap();

This works:

$("#txt").val("hello world");
$("#container").replaceWith(function() {
    return $('<div />').append($(this).contents());
});

The issue come with serializing the html with .html(). It's much better to work in terms of DOM Nodes. This'll also preserve event handlers.


Here's another way:

$('#container').wrapInner('<div/>').children().unwrap();
乖不如嘢 2024-12-16 04:15:57

试试这个,(使用 .html() 代替)(html() 在文本区域内插入值,.val() 不会)

http://jsfiddle.net/kRGqR/5/

Try this one, (use .html() instead) (html() inserts value INSIDE that textarea, .val() doesn't)

http://jsfiddle.net/kRGqR/5/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文