javascript - 像 LINQ 一样返回选定元素属性的自定义 jQuery 选择器

标签 javascript jquery linq performance css-selectors

问题

我需要查询作为对象数组返回的每个项目的一些属性

我们现在在做什么

$('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/

相关文章:

javascript - 删除显示 :none 后,Internet Explorer 9 (8 ?) iframe 不显示

vb.net - Linq 嵌套分组

javascript - 利用 Mongo 的 ES6 默认参数

javascript - 编辑存储在服务器上的文本文件

javascript - 如何在 setInterval 循环中设置延迟?

javascript - 创建一个按钮来启动我的 webkit 动画?

javascript - 导航栏跳转问题

javascript - 加载 Spinner - 即使在滚动页面时也始终保持在屏幕中间

c# - 确保一个值等于 LINQ 中的多个值之一

c# - 为什么不能从扩展类型的基类中调用扩展方法?