【问题标题】:Textarea : elem.val() vs elem.text() [duplicate]文本区域:elem.val() 与 elem.text() [重复]
【发布时间】:2011-04-27 06:01:42
【问题描述】:

这很奇怪。显然,我可以同时使用 .val() 和 .text() 来操作 textarea 文本。

但在我使用 .val 更改文本后,我无法再使用 .text。反之则不成立。

这导致了一些时髦的错误。原因是我正在使用的插件可能正在使用 .val 来操作文本。

谁能解释一下这是如何工作的?谢谢!

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您必须使用val(),或者(更好)textarea 的value 属性。 text() 最初起作用是因为 textarea 的初始值由它包含的文本节点(如果有)确定。您甚至可以最初更改此文本节点的nodeValuedata 属性,它将更新文本区域的值。但是,一旦用户更改了 textarea 的值或脚本更改了 textarea 的 value 属性,文本节点就会脱离图片并且不再以任何方式绑定到 textarea 的值。

    【讨论】:

    • 很好的解释。你是什​​么意思“文本节点不在图片中” - 你的意思是文本节点最初绑定到文本区域?
    • 是的,就是这样。最初,更改文本节点会更改 textarea 的值,但是一旦通过其他方式更改了值(用户输入或脚本更改了value 属性),更改文本节点将不再对值产生任何影响.更改 value 属性不会对文本节点产生任何影响。
    【解决方案2】:

    .val() 函数获取<textarea> 元素的“值”属性,而.text() 获取元素中文本节点(节点类型3)的内容。我想说,如果设置 .text() 完全有效,这不是一个好主意,因为它本质上是在玩弄物质的基本构建块。它可能会导致错误、浏览器崩溃或毁灭性爆炸。

    使用.val()

    edit.text() 工作到用户与 <textarea> 元素交互的点,或者 JavaScript 代码设置“值”属性。在那之后,元素的 DOM 内容变得无关紧要。你仍然可以得到它,但它不会反映元素的实际状态。

    【讨论】:

    • 很棒的解释!还有……“物质的基本组成部分”、“毁灭性的爆炸”——你是受过训练的物理学家吗? ;)
    【解决方案3】:

    听起来很奇怪,但在较低级别, .val() 是我期望的工作,因为 .value 是访问表单元素内容的方式。为什么 .text() 在某些情况下有效让我感到震惊

    【讨论】:

    • 它不必打败你。 textarea 可能包含,不同于例如输入,cdata(文本节点)。这就是 text() 将检索的内容...textnodes。
    • 啊,这就解释了。最有可能的是,调用 val('dummy') 会覆盖任何文本节点.. :)
    • 可以,但不应该重写,取决于浏览器的实现。请记住始终通过 javascript 访问,并且只访问 value-attribute 而不是包含 textNode,这样您就不会在任何浏览器中遇到问题。
    • 我同意你的观点,它不应该,但在这种情况下,它似乎是它不起作用的原因:)
    【解决方案4】:

    必须用Node.text()的类型检索...

    .Text() 获取所有匹配元素的 innerText(不是 HTML),.val() 从输入元素中检索值...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 2013-02-03
      • 1970-01-01
      • 2015-06-08
      • 2013-03-21
      • 1970-01-01
      • 2012-09-02
      • 2014-04-17
      相关资源
      最近更新 更多