我遇到了jQuery 1.5.1(无法在我们的开发周期中升级太晚)和IE6和7中的类选择器的问题。
我在页面上有一个div,我使用Javascript创建另一个div并将其插入到现有的div中。创建的div被赋予my-class-name
类。这个类没有风格,它只是一个通用的“标记”类。
当我使用此选择器时,它总是返回空:$('.my-class-name').length // always zero.
它在IE8 +以及所有其他浏览器中都能正常工作。有什么想法吗?
编辑: 这与我的代码类似。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test page</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var i = 0;
function addContent() {
var newDiv = document.createElement('div');
newDiv.setAttribute('id', 'newdiv-' + i);
newDiv.setAttribute('class', 'my-class');
var nc = $('#NewContent');
nc.append(newDiv);
i += 1;
}
function showContentCount() {
alert($('.my-class').length);
}
</script>
</head>
<body>
<div>
<p>Some content</p>
<input type="button" onclick="javascript:addContent();" value="Add new content" />
<input type="button" onclick="javascript:showContentCount();" value="Show new content count" />
<div id="NewContent"></div>
</div>
</body>
</html>
IE8 +工作正常,只有6和7给我带来了问题。
答案 0 :(得分:1)
我找到了答案。原因是IE6 / 7不使用class
作为class属性。他们使用className
代替。因此,行newDiv.setAttribute('class', 'my-class');
没有达到预期的效果,而必须是newDiv.setAttribute('className', 'my-class');
。我提出了一些逻辑来解释这一点,现在一切都按预期运行。
答案 1 :(得分:0)
还有一些原因未被发现。尝试调试:
alert ( $('.my-class-name').length );
var mylen = $('.my-class-name').length;
alert(mylen);
var mynewLen = $('.my-class-name').size();
alert(mynewLen);
.size()
是.length
哪个版本的jQuery?页面上还有什么?
注意:如果这是在动态创建的元素上,则必须在元素位于DOM之后运行。
编辑:注意试试这个
$('div.my-class-name').length;
注意:某些jQuery版本中的类选择器在某些上下文中无法正常工作 - 例如当VML元素在页面上时(请参阅jQuery bug#7071)。我虽然在黑暗中完全射击。解决方法:在页面上取出.live(),升级到jQuery版本1.6.1+并使用.delegate()代替.live();