我正在尝试使用jquery获取所有元素,并将它们放入数组中,我有以下代码:
var elements = $("*");
console.log(elements);
$.each(elements, function(){
if($.inArray({element: $(this), orginalSize:$(this).css("font-size"), size:$(this).css("font-size")}, fontSizeArray) !== -1)
{
fontSizeArray.push({element: $(this), orginalSize:$(this).css("font-size"), size:$(this).css("font-size")});
}
});
console.log(fontSizeArray);
但我在这里遇到一些问题:
$(“*”)甚至在标题中获取所有元素,所以我有元标记和不需要的东西,所以我试图获取体内的所有元素。
我查看数组中是否存在该项的条件也无效,当我有这个代码时,fontSizeArray为空,如果我删除if条件,我的数组就会被填充。
在我的数组中,我正在尝试获取元素名称,即div,p,a或其他,并将其分配给元素:但使用$(this)不起作用。
我在这里做错了什么?
答案 0 :(得分:0)
您可以使用jQuery find()方法选择正文以完成此操作:
$('body').find('*');
所以,最终你拥有它的代码并没有真正“过滤”你对$.inArray(...)
的调用中的任何内容,因为 DOM的每个元素的jQuery对象都是唯一的。
假设您要存储项目的“标签名称”(例如DIV,H2,H3等),我就已经开始尝试这个问题了。我不相信jQuery $.inArray()适用于对象(或者......我无法让它在我的机器上工作)所以我使用Array.prototype.some()方法简化了将完成你想要做的事情:
var elements = $("body").find("*"),
fontSizeArray = [];
elements.each(function() {
var obj = {
element: $(this).prop('tagName'),
originalSize: $(this).css("font-size"),
size: $(this).css("font-size")
};
if (!fontSizeArray.some(function(item) {
return item.element === obj.element &&
item.originalSize === obj.originalSize &&
item.size === obj.size;
})) {
fontSizeArray.push(obj);
}
});
console.log(fontSizeArray);