每个HTML元素都有偏移值。我可以返回一个元素,例如offsetLeft > 10
?
从未听说过这个功能,因此问题就在这里。
我知道这可以通过循环完成,但这些都很慢。有一个关于XPath的想法,但找不到与引用内属性相关的任何内容。
提前致谢!
P.S。不需要过时的浏览器兼容性 - HTML5'可以做到。
答案 0 :(得分:4)
据我所知,没有办法做到这一点,不涉及某种形式的循环。您可以在标准JS中执行以下操作:
var elems = document.getElementsByTagName("*"),
myElems = [];
for(var i = 0; i < elems.length; i++) {
if(elems[i].offsetLeft > 10) myElems.push(elems[i]);
}
或者,如果你正在使用jQuery,你可以用更少的代码来做(但它可能更慢!):
var myElems = $("*").filter(function() {
return $(this).offset().left > 10;
});
如果您考虑一下,您希望选择具有特定属性值的文档中的所有元素。无论你是否自己编写循环,总是会涉及一个循环,因为每个元素都必须被检查。
答案 1 :(得分:0)
你看过这个页了吗? offset
答案 2 :(得分:0)
jQuery可以轻松选择元素的属性
<div>Dont find me</div>
<div this="yes">Find me</div>
$('div[this=yes]'); // will select the second div
您将遇到的问题是偏移和位置等问题是计算值,而不是预先存储在带有元素的dom中。如果你需要选择这个,我建议把它们作为dom元素本身的属性。然后上面的方法工作得很好。
答案 3 :(得分:-1)
我建议最好的方法是扩展jQuery的选择器。这样的事情效果很好:
$.extend($.expr[':'],{
offsetLeft: function(a,i,m) {
if(!m[3]||!(/^(<|>|=)\d+$/).test(m[3])) {return false;}
var offsetLeft = $(a).offset().left;
return m[3].substr(0,1) === '>' ?
offsetLeft > parseInt(m[3].substr(1),10) :
m[3].substr(0,1) === '<' ? offsetLeft < parseInt(m[3].substr(1),10) :
offsetLeft == parseInt(m[3].substr(1),10);
}
});
这将允许您使用语法(例如
)选择元素 $('span:offsetLeft(>10)')
或
$('.someClass:offsetLeft(<10)')
甚至
$('.someClass:offsetLeft(=10)')
应该将这个钩子添加到jQuery的选择器中,这些选择器通常非常快,但毫无疑问,在某个深处,有一个循环正在进行。没有办法避免这种情况。
答案 4 :(得分:-2)
您可以使用jQuery
轻松完成$("*").each(function(index, elem){
if($(this).offset().left > 10){
// do something here with $(this)
}
});