使用JQuery 2.0.2或2.0.3动态创建div无法正常工作

时间:2013-11-03 17:58:20

标签: javascript jquery

我想知道1.9.1和2.0.2之间关于附加的jsFiddle的区别。

HTML:

<div id='M1' style='width:100%; border:1px solid red;'>Main Container</div>

JS:

// first method
$("#M1").append("<div>method 1</div>");

// second method
jQuery('<div/>', {
    title: 'Method 2',
    rel: 'external',
    style: 'width:90%; border: 1px solid green;',
    text: 'Method 2'
}).appendTo('#M1');

// third method
$('<div/>', {
    'id':'myDiv',
    'text':'Method 3',
}).on('click', function(){
    alert(this.id); // myDiv
}).appendTo('#M1');

http://jsfiddle.net/Dzbza/5/

为什么它适用于jQuery 1.9.1,但不适用于2.0.2。

在2.0.2或2.0.3中可以使用的等效代码是什么

如果使用1.9.1运行示例,它可以正常工作,如果将id更改为2.0.2则不会

谢谢

1 个答案:

答案 0 :(得分:1)

这似乎特定于jsFiddle,可能是它工作的框架环境。我可以用IE10 using jsFiddle复制你的结果,但是如果我使用jQuery v2.0.2和那个代码创建了我自己的页面,它就可以了。同样,JSBin上的相同页面也可以工作:Live Copy | Source

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Scratchpad</title>
<script src="//code.jquery.com/jquery-2.0.2.js"></script>
</head>
<body>
<div id='M1' style="width:100%; border:1px solid red;">Main Container</div>
<script>
// first method
$("#M1").append("<div>method 1</div>");

// second method
jQuery('<div/>', {
    title: 'Method 2',
    rel: 'external',
    style: 'width:90%; border: 1px solid green;',
    text: 'Method 2'
}).appendTo('#M1');

// third method
$('<div/>', {
    'id':'myDiv',
    'text':'Method 3',
}).on('click', function(){
    alert(this.id); // myDiv
}).appendTo('#M1');
</script>
</body>
</html>

所以从根本上说,没有问题,因为它确实有效......除了那个环境。

当小提琴失败时,我在IE10的Dev Tools中得到两个错误:

SCRIPT5: Access is denied.
jquery-2.0.2.js, line 1378 character 2
SCRIPT5009: '$' is undefined 
show, line 20 character 1

这是上下文中的jQuery-2.0.2.js第1378行:

1375|  // Support: IE>8
1376|  // If iframe document is assigned to "document" variable and if iframe has been reloaded,
1377|  // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
1378|  if ( parent && parent.frameElement ) {
1379|    parent.attachEvent( "onbeforeunload", function() {
1380|      setDocument();
1381|    });
1382|  }

再次,这表明jsFiddle环境特有的东西。可能值得检查jQuery问题跟踪器以查看它是否是已知问题,如果不是,则报告它。