问题
我需要查询作为对象数组返回的每个项目的一些属性
我们现在在做什么
$('selector').each(create array of texts or whatsoever);
怎么了?
Why should we iterate over elements for each requirement?
在 LINQ 中也是一样
IQueryable<Book>;
books.Select(b=> b.Text).ToArray();
// or another sample
books.Select(b=> new { b.Text , b.ISBN}).ToArray();
我们/我需要什么?
选择指定的元素属性作为对象数组而不重复元素 - 这称为延迟枚举
这可能吗?
我想是的,因为现在我有一些想法。
我已经知道“map”和“each”方法,请注意它们都会重复选择器项。所以是的,map 会产生我想要的结果,但不完全是。
另请注意,即使是性能比 java 脚本更好的 C# 也在使用我要求的这种方法,
所以这是所有网络开发人员的要求,而不仅仅是我,这正是我在这里分享要解决的问题的原因。
研究结果
使用 jQuery 对元素进行迭代是不可避免的,因为 jQuery 本身不会使用循环遍历文档元素来查找元素,直到有必要这样做(例如伪类),因此为了在 jQuery 基础结构上实现延迟枚举,我们必须强制 jQuery 对项目进行迭代,并且让它变慢。
我使用名为“select”的伪类并像 lambda 表达式一样传入 .net 来实现延迟枚举。这就像 .net 一样处理选择非常好,但结果比 map 慢,每个 jQuery 方法最多 50 %.最后的答案是 jQuery map 方法。
最佳答案
您可能正在寻找 map()方法:
var books_text = $(".book").map(function() {
return $(this).text();
}).get();
var books_info = $(".book").map(function() {
var $this = $(this);
return {
text: $this.text(),
isbn: $this.attr("isbn") // If stored in an attribute.
};
}).get();
关于javascript - 像 LINQ 一样返回选定元素属性的自定义 jQuery 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6486852/