2

看看这里的 JsFiddle:

http://jsfiddle.net/ru2Fg/2/

本质上,它以两个textareas 开头:一个是空的,一个是里面有东西的,一个是input type=text. 我的印象是把东西放进去input你改变它value,把东西放进去textarea你把文本作为子节点添加到节点中。

我执行 a$(...).val(...)来更改它们的内容。它们的内容确实发生了变化。

但是,DOM 看起来完全一样!我用console.log();打印出 3 个元素 他们似乎没有改变。我用 chrome 的检查元素查看它们:它们似乎没有改变。

我看过jQuery 的 val() 方法更改似乎并没有改变 DOM,但是这个问题得出的结论是,firebug 不刷新它显示的 HTML 很有趣。在这种情况下,我很确定inspect 元素会显示页面上存在的当前lefthtml:例如,当事物滚动时,我已经看到属性急剧变化。我也在使用控制台检查它,它告诉我同样的事情:没有任何改变。

不过,我的眼睛告诉我发生了一些变化,因为我看到的是“10,omg,moo”而不是“空白,你好,世界,2000”。这是怎么回事?

编辑:我发布了错误的 jsFiddle。现在应该是正确的

4

3 回答 3

3

value 属性value 属性是有区别的。当您在输入框中键入时,您更改的是属性,而不是属性。该属性与加载文档时的属性相同。除此之外,这意味着您可以使用 将输入框重置为其默认值elem.value = elem.getAttribute('value');

<select>同样,如果您有一个带有属性集的选项之一的下拉菜单selected,即使您选择了不同的选项,该属性仍然存在,即使selected属性是 now false

这同样适用于复选框和checked属性。这同样适用于disabled属性,以及其他一些事情。

于 2012-04-05T17:38:08.620 回答
0

它实际上是在改变 DOM,否则 10 个无论如何都不会出现在文本区域中。问题出在萤火虫本身(在旧萤火虫列表中),我不确定它是否在新萤火虫中仍然可用。

要验证,您可以使用 Firefox 的 Web 控制台或 chrome 的控制台。

于 2012-04-05T17:11:44.393 回答
0

在 jQuery 发生任何事情之前,DOM 已完全加载,因此从技术上讲,调试器不会看到插入到 DOM 中的数据。调试工具只看到渲染的内容,因此您将无法操作通过 jQuery 到达的“事后”数据。您可以将其视为“带外”或以某种方式伪造 DOM。AJAX 也是如此。如果您使用 .load() 等 AJAX 方法添加数据或页面内容,您将不会在 DOM 中看到它。

jQuery 中的输入框有 val() 方法——这是 value 属性,在 textarea 中,通常是 html() 方法,textarea 包含什么。

于 2012-04-05T17:12:07.967 回答