javascript - jquery 将 .val() 放在 DIV 的什么位置?

标签 javascript jquery

jQuery(通过 2.1.0 测试的所有版本)允许我在 DIV 对象上调用 .val("some value") 来设置一个值DIV。它不会显示,也不会在 Chrome 开发者工具中显示为 HTML5 数据属性。然而,我可以稍后通过调用 .val() 来获取结果。

例如(来自 http://jsfiddle.net/X2nr6/ ):

HTML:

<div id="mydiv" style="display: none;">Some text</div>
<div id="debug"></div>

Javascript:

$('#mydiv').val('A value attached .');
$('#debug').text( $('#mydiv').val() );

显示结果:

A value attached.

值存储在哪里?不知道它存储在哪里让我担心我依赖黑客。

最佳答案

jQuery 只是分配给一个 value div 上的属性(property)对象( HTMLDivElement 的实例 div ),即使它通常没有一个。在我见过的每个浏览器中都允许在元素上创建新属性,所以它可以工作。我不会使用 valdivs不过,这是定期的。

Here's一个非 jQuery 示例:

var div = document.createElement('div');
console.log('value' in div); // false, divs don't normally have a value property
div.value = 42;
console.log('value' in div); // true, we've created a property on the element
console.log(div.value);      // 42

the same sort of thing使用 jQuery:

var $div = $("<div>");
display(typeof $div.prop('value'));
$div.val(42);
display(typeof $div.prop('value'));
display($div.prop('value'));

这种在元素上创建新的、自定义的、非标准属性的业务称为创建“expando”属性。它们可以非常方便。 (例如,jQuery 在内部使用它们来管理 data 缓存和其他一些事情 — 如果您仔细观察您已经设置使用 data 的数据的 DOM 元素,您你会看到一个名称类似于 jQuery1110028597884019836783 的属性;这是 jQuery 用来在 jQuery 的内部数据缓存中查找元素数据的关键。jQuery 不会将 数据 存储在元素的 expando 中,因为IE 垃圾回收问题;它将 key 存储在那里,并将数据存储在 JavaScript 对象中。)

关于javascript - jquery 将 .val() 放在 DIV 的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076694/

相关文章:

javascript - 使用 paperjs 在图像上绘图

javascript - 无法理解 NodeJS 中的异步函数

php - 如何在 JavaScript 或 jQuery 中访问 PHP 变量而不是 <?php echo $variable ?>

javascript - 如何在将 ajax 发送到 php 后关闭页面重新加载以及如何修复此代码

jQuery .live() 在 IE9 中不起作用

javascript - 从二维距离数组在浏览器中绘制 map

php - 这段代码中定义的表单的 `submit()` 函数在哪里?

javascript - Instagram 新 API,通过标签获取项目

javascript - 查询。面对点击事件的问题

javascript - 使用 jquery ajax json 发送表单数据