【发布时间】:2015-01-09 04:02:23
【问题描述】:
我正在寻找一种简单的方法来定位页面上将 margin-left 和 margin-right 设置为 auto 的元素。
我得到了这个脚本,它在某些时候对我有帮助:
(function() {
var elementsList = [];
for (var i = 0; i < document.styleSheets.length; i++) {
var styleSheet = document.styleSheets[i];
if (styleSheet.rules) {
for (var j = 0; j < styleSheet.rules.length; j++) {
var rule = styleSheet.rules[j];
if (rule && rule.style && rule.style.marginLeft == 'auto' && rule.style.marginRight == 'auto') {
var smallList = document.querySelectorAll(rule.selectorText);
if (smallList.length)
elementsList = elementsList.concat(smallList);
}
}
}
}
return elementsList
})();
虽然这个函数完成了一些工作,但它并没有捕捉到我在网站上看到的大多数 margin: auto 的情况。
你能告诉我一个更好的方法吗?
【问题讨论】:
-
有一个更简单的方法。你为什么不创建一个类?像 .margin-auto 之类的东西并通过所有这些元素进行搜索?
-
这听起来像是一个 jQuery 选择器问题。你想要吗?
-
如果你包含 jquery 并简单地使用那里的选择器,你会更容易。 @MDeSchaepmeester 咬你 ;)
-
我认为您最好使用
getComputedStyles以可靠地过滤margin-left/right等于auto的元素。document.styleSheets也很聪明,但也有可能使用内联样式。话虽如此,代码将非常贪婪,因为您需要扫描许多页面元素。您可以通过跳过内联元素和<br>等元素来提高效率。 -
@dfsq 不幸的是,这在 FF 和 Safari 中失败了,当边距设置为
auto时,即使它们正确居中渲染,两者都会返回0px。
标签: javascript css margin