Javascript Access$(';选择器';)。函数/对象中的数据
如何访问函数或对象中由$.data()设置的值Javascript Access$(';选择器';)。函数/对象中的数据,javascript,jquery,Javascript,Jquery,如何访问函数或对象中由$.data()设置的值 $('#timers').data('firsttimer', 100); //prints 100 document.write($('#timers').data('firsttimer')); function blah(){ //Prints nothing document.write($('#timers').data('firsttimer')); }
$('#timers').data('firsttimer', 100);
//prints 100
document.write($('#timers').data('firsttimer'));
function blah(){
//Prints nothing
document.write($('#timers').data('firsttimer'));
}
blah();
查看此JSFIDLE以方便测试代码问题在于“document.write()”。尽量避免它。由于某种原因,我在函数调用中遇到了
document.write()
的问题,但是如果我使用jQuery的.append()
,它可以正常工作
编辑: 找到有关
文档的此stackoverflow问题。请编写:
这篇文章中的一个答案中有一个有趣的句子:
以我的拙见,只要您在文档加载后不尝试使用document.write,document.write就不是天生的邪恶。
因此,这可能是问题的关键(或部分原因)。在这种情况下,我相信您的document.write以某种奇怪的方式在DOM上跺脚,清除了计时器分区。将两个document.write调用切换为警报调用(并添加一行以调用blah())使我可以看到两个警报框,两者都显示值为100
<div id="timers"></div>
并非所有浏览器的行为都是一致的。请记住,在JSFIDLE上,由于您选择了左侧的onLoad
设置,因此该代码已经包装在窗口加载回调中。加载DOM后,使用document.write进行的任何后续更改都将替换整个文档
以下是on文档中的相关文本。请编写:
除非在解析文档时从脚本元素的主体调用,或者在脚本创建的文档上调用,否则调用此方法将首先清除当前页面,就像调用了document.open()一样。
以下是浏览器在我的Mac电脑上的表现:
铬与狩猎
把文件一扫而光。即使是100也没有打印出来。文本节点本身在这里被忽略,但当包装在一些html标记中时,它们就会显示出来。与上面相同,值分别包装在
和
标记中
Opera和Firefox
擦除文档,然后附加文本节点“100undefined”。它打印“未定义”,因为节点在哪里调用blah()?在我的实际代码中,我不使用document.write,而是尝试将值分配给对象。然而,我的问题与代码的加载顺序有很大关系
<div id="timers"></div>
$('#timers').data('firsttimer', 100);
//shows 100
alert($('#timers').data('firsttimer'));
function blah(){
//Prints nothing
alert($('#timers').data('firsttimer'));
}
blah();
document.write($('#timers').data('firsttimer'));