Пользовательский селектор jQuery, который возвращает свойства выбранного элемента, такие как LINQ - PullRequest
3 голосов
/ 27 июня 2011

Проблема

Мне нужны некоторые свойства каждого элемента, который запрос возвращает как массив объектов

Что мы делаем сейчас

$ (' селектор '). каждый ( создать массив текстов или что-то еще );

Что не так?

Почему мы должны повторятьсянад элементами для каждого требования?

Здесь то же самое в 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' и передавая .net как лямбда-выражение.обработка выбора очень хорошо, как .net, но результат был медленнее, чем map, и каждый метод jQuery до 50%. В конечном итоге ответ - метод карты jQuery.

1 Ответ

5 голосов
/ 27 июня 2011

Возможно, вы ищете метод 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();
...