Как установить переменную как пустой, но работоспособный объект Jquery? - PullRequest
3 голосов
/ 26 мая 2010

За пределами я объявляю переменную, используя var list;. Я использую эту переменную внутри цикла for следующим образом:

// add the html to the list
if (list == undefined)
    list = item;
else
    list.append(item.contents());

item - это клонированная сборка объекта jquery из вызова $('list_template').clone(); (list_template - это div с элементами <li> внутри). То, что я делаю, - это создание списка, который я затем добавлю туда, где он мне нужен.

Сейчас этот код работает нормально, но мне он не кажется правильным. К сожалению, я не могу понять, как правильно объявить переменную list как пустой объект Jquery. Я пробовал оба:

var list = $([]);
var list = $('');

Обе эти причины приводят к тому, что append работает некорректно (или, как и ожидалось), при этом list.html () имеет значение null. Есть ли способ инициализировать мою переменную пустым объектом jquery, поэтому все, что мне нужно сделать, это list.append(item.contents()); без операторов if / else?


Редактировать: Хорошо, чтобы уменьшить путаницу, вот вся функция javascript, которая в настоящее время работает нормально:
        var list;

        // Loop through all of the objects
        var objects = data.objects;
        for (x = 0; x < objects.length; x++) {
            // Clone the object list item template
            var item = $("#object_item_list_template").clone();

            // Setup the click action and inner text for the link tag in the template
            item.find('a').bind('click', { val: objects[x].Id }, function (e) { ShowObjectDetails(e.data.val); })
                          .html(objects[x].Name);

            // add the html to the list
            if (list == undefined)
                list = item;
            else
                list.append(item.contents());
        }
        // set the list of the topics to the topic list
        $("#object_list").empty();
        $('<ul>').appendTo("#object_list").append(list.contents());

Шаблон списка объектов выглядит следующим образом:

<div id="object_item_list_template" style="display:none">
    <li class="object_item"><a href="#"></a></li>
</div>

Это все работает правильно, клонируя элемент списка, настраивая действие щелчка и добавляя его в список на дисплее.

Я пытаюсь избавиться от оператора if / else. Я не могу просто сделать list.append (), потому что если список не определен (или не является объектом Jquery), он вызывает исключение.

1 Ответ

4 голосов
/ 26 мая 2010

Пустой объект jQuery объявлен как:

$();

Документы для создания объекта jQuery: http://api.jquery.com/jQuery/


EDIT:

Звучит так, будто вы пытаетесь исключить оператор if/else, расширяя list независимо от того, есть ли у него какой-либо контент.

Это правильно?

Если это так, попробуйте что-то вроде этого:

list = $( list.get().concat(item.get()) );

или

$.extend(list, item);

(Предполагается, что list начинается как пустой объект jQuery.)


EDIT:

Поскольку вы создаете элементы в цикле, вы всегда можете push() затем в объект jQuery.

Попробуйте что-то вроде этого:

var list = $();  // Start off with empty jQuery object.

...

list.push(item.find('li').get(0));  // A jQuery object is an Array. You can `push()` new items (DOM elements) in.

...

('<ul>').appendTo("#object_list").append(list);

(Я отредактировал оригинал, чтобы вставить только элемент DOM в объект jQuery.)

Должен добавить текущий элемент в цикле в ваш список.

Вы можете исключить вызовы find() в своем коде, если только что клонировали дочерние элементы #object_item_list_template:

$('li', '#object_item_list_template').clone();  // Clone the `li` without the `div`.

Теперь у вас есть клон самого li. Не нужно искать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...