【问题标题】:Custom jQuery Selector That Returns Selected Element Properties Like LINQ返回所选元素属性的自定义 jQuery 选择器,如 LINQ
【发布时间】:2011-09-23 03:09:13
【问题描述】:

问题

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

我们现在做什么

$('selector').each(创建文本数组或其他任何东西);

怎么了?

我们为什么要为每个需求迭代元素?

在 LINQ 中也是这样

IQueryable<Book>;
books.Select(b=> b.Text).ToArray();
// or another sample
books.Select(b=> new { b.Text , b.ISBN}).ToArray();

我们/我需要什么?

选择指定的元素属性作为对象数组而不重复元素 - 这称为延迟枚举

有可能吗?

我认为是的,因为现在我有一些想法。

I already know about 'map' and 'each' methods, beware that both of them will reiterate over selector items.So yes map will results what i want, but not exactly. Also note that even C# that have more better performance than java-script is using this method that i'm asking for, So this is a requirement for all web-developers not just me and that's exactly why i'm sharing the problem here to be solved.

研究结果

使用 jQuery 迭代元素是不可避免的,因为 jQuery 本身不会使用循环遍历文档元素来查找元素,直到对于伪类来说是必要的,所以为了在 jQuery 基础设施上实现延迟枚举,我们必须强制 jQuery 迭代项目,并且让它变慢。

我使用名为“select”的伪类实现了延迟枚举,并像 lambda 表达式一样传入 .net。这可以像 .net 一样很好地处理选择,但结果比 map 慢,每个 jQuery 方法最多 50 个%.最后答案是jQuery map方法。

【问题讨论】:

  • 您是在问是否可以在 jQuery 中不进行迭代?还是您告诉我们这是可能的?

标签: javascript jquery linq performance css-selectors


【解决方案1】:

您可能正在寻找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();

【讨论】:

  • 感谢您的快速响应,但 map 再次重复元素,而不仅仅是元素。它是两个相互内部的 for 循环,一个用于元素,一个用于对象上的每个键。
  • @Beygi,恐怕我不明白,你的意思是map() 迭代元素两次?另外,each key on object 是指元素的每个属性吗?
  • 不,我不是,如果您查看 jquery 1.6.1 的第 756 行,您会看到它正在遍历元素的每个键,并且因为我们有多个元素,结果将是...,并且还被评论:遍历对象上的每个键
  • 还要记住我们希望在没有另一个循环的情况下这样做,因为如果我们这样做 $.each 也会这样做。
  • 也许Beygi正在寻找一种延迟枚举机制?如果我们使用 javascript 将一个数组映射到一个新数组,目的是对新数组中的元素做一些事情,我们将不得不对元素进行两次迭代,一次用于映射,一次用于执行该操作。有了延迟枚举机制,我们只需要迭代一次——映射函数将在每个元素被访问时被调用。这在 C# 中很容易实现。虽然不知道在 javascript 中执行此操作的最佳方法...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2023-03-20
  • 2012-09-24
  • 2012-08-08
  • 2013-09-06
  • 2010-12-17
相关资源
最近更新 更多