Javascript IE中div的jQuery重新加载列表后添加的额外空间
我正在编写一个网页,在选择某个内容时使用jQuery更新列表。列表下面是一个按钮。该更新在Firefox和Chrome中运行良好,但在IE中,每次更新时列表和按钮之间都会增加一点空间。下面是一个简化的示例,它做了同样的事情:Javascript IE中div的jQuery重新加载列表后添加的额外空间,javascript,jquery,css,internet-explorer,Javascript,Jquery,Css,Internet Explorer,我正在编写一个网页,在选择某个内容时使用jQuery更新列表。列表下面是一个按钮。该更新在Firefox和Chrome中运行良好,但在IE中,每次更新时列表和按钮之间都会增加一点空间。下面是一个简化的示例,它做了同样的事情: <html> <head> <style type="text/css"> #list { padding: 10; }
<html>
<head>
<style type="text/css">
#list {
padding: 10;
}
</style>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="test">
<ul>
<!-- List -->
<li>
<div id="list">
<ul>
<li>before 1</li>
<li>before 2</li>
</ul>
</div>
</li>
<!-- Button -->
<li>
<div>
<button id="button" onClick="reload();">button</button>
</div>
</li>
</ul>
</div>
</body>
<script type="text/javascript">
function reload() {
var html =
"<ul>" +
"<li>after 1</li>" +
"<li>after 2</li>" +
"</ul>";
$("div#list").html(html);
}
</script>
</html>
#名单{
填充:10;
}
-
- 1之前
- 2点之前
-
按钮
函数重载(){
变量html=
“”+
“- 在1之后”+
“
- 在2之后”+
“
”;
$(“div#list”).html(html);
}
点击按钮。在Firefox和Chrome中,它保持不变。在IE(9)中,每次我点击它时,它都会向下移动一点(一点意味着大约10或20像素。这对人眼来说很容易察觉)。谁能告诉我这是什么原因吗?
谢谢。
#名单{
填充:10;
}
每次调用重新加载功能时,即添加10个填充,这是问题的原因。更新
问题似乎与IE填充计算有关,而不是与代码有关,因为直接使用js.innerHtml()也会发生同样的情况
然后我会建议删除填充并在ul中添加边距,因为它会影响您要删除的元素,可能这次也会删除边距
#list {
padding: 0;
}
#list ul {
margin:10;
}
根据jQuery文档 此方法使用浏览器的 innerHTML属性。有些浏览器可能会 没有生成一个完全相同的DOM 复制提供的HTML源代码 也许你应该尝试另一种方法。比如说
$("div#list").empty().append($(html));
对我来说,它在IE9中看起来不错(我添加了一个验证程序来证明它,前后我都得到了46):问题一定在别处。有趣。当我在JSFIDLE中运行它时,我也没有遇到问题。我还使用document.getElementById('list').innerHTML=(等等)尝试了它,但遇到了相同的问题。让我们尝试一种不同的方法,然后,我用另一种可能工作方式不同的解决方案更新我的答案。我不确定这会有多大帮助,因为
$(html)
的工作方式是相同的(通过innerHTML)使用复杂的html字符串,如问题中的字符串。将填充从#list移动到#list ul修复了该问题(但将其保留为填充,而不是切换到边距)是的,看起来您最终将#list
嵌套在原始#list
中实际上,无论我将填充指定为10、50、100等,按钮的移动量都是相同的。不过,如果我将填充指定为0,则效果很好。
$("div#list").empty().append($(html));