2012-02-28 3 views
3

Библиотека Linq-For-Javascript содержит функции, которые преобразуют между «jQuery objects» и «Enumerable objects»: toEnumerable() и TojQuery(). Рассмотрим разницу между этими двумя линиями:Вложенные массивы LINQ-for-Javascript

$('tr'); // returns array of tr 
$('tr').toEnumerable().TojQuery(); // returns array of tr[1] 

Преобразование из JQuery в Enumerable и обратно JQuery не дает вам то, что вы начали с. Конечным результатом является массив массивов элементов, каждый из которых имеет длину 1. Мне нужно использовать Enumerable, поэтому это просто удобный пример моей проблемы.

Это означает, что, чтобы получить идентификатор элемента, вам нужно сделать следующее:

$('tr')[0].id; // returns "myID" 
$('tr').toEnumerable().TojQuery()[0][0].id; // returns "myID" 

Я удивлен этим, потому что несмотря на то, что я якобы вернулся TojQuery(), то объект, возвращаемый TojQuery() не работает с типичной JQuery звонки:

$('tr').find('td').length; // returns 170 (in my case) 
$('tr').toEnumerable().TojQuery().find('td').length; // returns 0 (BAD) 

Я хотел бы, если обе линии вернулись 170, но видимо Linq-For-Javascript не работает.

Итак, мои вопросы:

  1. Почему это?
  2. Я делаю это неправильно?
  3. Если нет, никаких хороших обходных решений? (конвертация array of 1-element arrays на array of elements?)

Спасибо!

ответ

0

JQuery обрабатывает операции в соответствии с типами. В первой строке кода, если находит все объекты HTML TR, и с помощью этой информации он может прикреплять необходимые функции к найденным объектам.

$('tr').find('td') 

Однако, он не мог понять, после того, как вы измените его на enumarable объекта, так как он больше не кажется HTML Object вместо этого он становится любым другим типом объекта. Таким образом, jquery не может присоединить к нему функцию.

$('tr').toEnumerable() 
Смежные вопросы