代码之家  ›  专栏  ›  技术社区  ›  KallDrexx

如何将变量设置为空的、但可操作的jquery对象?

  •  3
  • KallDrexx  · 技术社区  · 14 年前

    在for i之外使用 var list; . 我在for循环中使用这个变量,如下所示:

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

    item 是从 $('list_template').clone(); 调用(列表模板是一个带有 <li> 里面的元素)。我要做的是创建一个列表,然后在需要它的地方附加到()。

    现在这个代码很好用,但我觉得不太合适。不幸的是,我似乎不知道如何正确地声明 list 变量为空jquery对象。我试过两种方法:

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

    这两种情况都会导致附加无法正常工作(或如预期的那样),list.html()为空。有没有一种方法可以将变量初始化为空的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(),因为如果list未定义(或者不是jquery对象),它会抛出一个异常。

    1 回复  |  直到 14 年前
        1
  •  4
  •   user113716    14 年前

    空jquery对象声明为:

    $();
    

    jquery对象创建文档: http://api.jquery.com/jQuery/


    编辑:

    听起来你想消除 if/else 扩展语句 list 是否有内容。

    对吗?

    如果是这样,请尝试如下操作:

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

    $.extend(list, item);
    

    (假定 列表 以空jquery对象开始。)


    编辑:

    因为您在循环中创建元素,所以可以 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 本身。无需查找。