Jquery(input/textarea).val():如何在不更改DOM的情况下添加内容
Jquery (input/textarea).val(): how is it adding content without changing the DOM?
在这里查看JsFiddle:
http://jsfiddle.net/ru2Fg/2/
从本质上讲,它从两个textarea
开始:一个是空的,一个里面有东西,还有一个input type=text
。我的印象是,要把东西放在input
中,就要把它改为value
,而要把东西放到textarea
中,就需要把文本作为子节点添加到节点中。
我执行$(...).val(...)
来更改它们的内容。并且它们的内容确实发生了变化。
然而,DOM看起来完全一样!我正在用console.log()
打印出这3个元素;它们似乎没有变化。我用chrome的inspect元素来观察它们:它们似乎没有变化。
我看过jQuery';s val()方法更改不会';似乎没有改变DOM,但这个问题得出的结论是,firebug没有刷新它显示的HTML,这很有趣。在这种情况下,我确信inspect元素显示了页面上存在的当前html:例如,当滚动时,我看到left
属性剧烈变化。我也在使用控制台检查它,这告诉我同样的事情:没有改变。
不过,我的眼睛告诉我,发生了一些变化,因为我看到的是"10,omg,moo",而不是"空白,你好,世界,2000"。怎么回事?
编辑:我发布了错误的jsFiddle。现在这应该是正确的
value
属性和value
特性之间存在差异。在输入框中键入时,将更改属性,而不是特性。该属性与加载文档时保持不变。除其他外,这意味着您可以使用elem.value = elem.getAttribute('value');
将输入框重置为其默认值。
类似地,如果您有一个下拉<select>
,其中一个选项设置了selected
属性,即使您选择了其他选项,即使selected
属性现在是false
,该属性也将仍然存在。
这同样适用于复选框和checked
属性。这同样适用于disabled
属性,以及其他一些内容。
事实上,它正在更改DOM,其他方式无论如何都不会在文本区域中显示10。问题出在firebug本身(列出旧的),我不确定它是否在新的中仍然可用。
为了验证,您可以使用firefox的web控制台或chrome的控制台。
在任何jQuery发生之前,DOM都已完全加载,因此从技术上讲,调试器看不到插入DOM中的数据。调试工具只能看到渲染的内容,因此您将无法操作通过jQuery到达的"事后"数据。您可以将其视为"带外"或在某种程度上篡改DOM。AJAX也是如此。如果您使用像.load()这样的AJAX方法添加数据或页面内容,您将不会在DOM中看到它。
jQuery中的一个输入框有val()方法——这是value属性,在文本区域中,它通常是html()方法,文本区域包含什么。
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 如何在不创建新元素的情况下修改 DOM 元素的位置
- 是否可以在不将其添加到DOM的情况下预加载和缓存视频文件
- react-在不破坏封装的情况下访问DOM
- 在不移动DOM的情况下最大化Div
- 在没有DOM附加的情况下将多个SVG加载到javascript数组中
- 尝试在不使用 jQuery dom ready 函数的情况下传入变量
- 在不删除/附加 DOM 节点的情况下对 DOM 节点进行重新排序
- 在我的情况下,如何将 html 内容添加到我的 dom 中
- 如何在不插入 dom 的情况下加载 mbox 内容
- 有没有办法在没有单独对象的情况下克隆 DOM 元素
- 如何在不牺牲可用性的情况下修改 DOM 中的大量元素
- 我们可以在不将其加载到无限可滚动网页中的情况下访问 DOM 元素吗?
- 如何在不使用 DOM 突变事件的情况下检测 AJAX 节点插入
- 如何在不使用 CSS 的情况下在动态添加的 javascript DOM 元素中保留空格
- 在不使用样式属性的情况下定位 dom 元素
- 如何在不按 DOM 顺序排序的情况下将 jquery 选择添加到一起
- Jquery(input/textarea).val():如何在不更改DOM的情况下添加内容
- 在不实际更改DOM元素的情况下对其强制执行更改事件