簡體   English   中英

是否有與MooTools的Element()構造函數等效的jQuery?

[英]Is there a jQuery equivalent of MooTools' Element() constructor?

我將為我的網站啟動一個javascript報告引擎,並已開始使用MooTools進行一些原型設計。 我真的很喜歡能夠做這樣的事情:

function showLeagues(leagues) {
    var leagueList = $("leagues");
    leagueList.empty();
    for(var i = 0; i<leagues.length; ++i) {
        var listItem = getLeagueListElement(leagues[i]);
        leagueList.adopt(listItem);
    }
}

function getLeagueListElement(league) {
    var listItem = new Element('li');
    var newElement = new Element('a', {
        'html': league.name,
        'href': '?league='+league.key,
        'events': {
                'click': function() { showLeague(league); return false; }
        }
    });
    listItem.adopt(newElement);
    return listItem;
}

據我所知,jQuery的“采用”類型方法僅采用html字符串或DOM元素。 是否有與MooTools 元素等效的jQuery?


編輯:我在這里要尋找的最大的事情是單擊事件到鏈接的程序化附件。

從語法上講,使用jQuery來做可能更好,但是使用起來可能更有效

  document.createElement('li')

並消除了至少進行字符串比較測試和次要令牌解析的需要。

如果您堅持要生成許多dom節點, flydom也可能會激發您的興趣。 (理論上應該更快,但是還沒有測試過)


注意:在內部,jQuery(“ <html> </ html>”)看起來可以有效地做到這一點(過於簡化):

jQuery(matcher) --> function(matcher)
{
   return jQuery.fn.init(matcher) --> function(matcher)
   {
      return  this.setArray(
        jQuery.makeArray(
           jQuery.clean(matcher) --> function(matcher)
           { 
               div = document.createElement('div');
               div.innerHTML = matcher;
               return div.childNodes;
           }
        )
      );
   }
}

因此,人們會假定“ document.createElement ”因此是一個“要求”,如果您知道要刪除的內容(即:不使用$( datahere )解析某些第三者數據),那么document.createElement將會是合理的,並且加快速度,避免大量正則表達式和緩慢的字符串操作。

相比之下: jQuery(document.createElement('div'))看起來很有效(過度簡化):

jQuery(matcher) --> function(matcher)
{
   return jQuery.fn.init(matcher) --> function(matcher)
   {
       this[0] = matcher; 
       this.length = 1; 
       return this; 
   }
}

這是jQuery中的同一件事。 基本上,要創建一個新元素,只需放入所需的HTML。

function showLeagues(leagues) {
    var $leagueList = $("#leagues");
    $leagueList.empty();
    $.each(leagues, function (index, league) {
        $leagueList.append(getLeagueListElement(league));
    });
}

function getLeagueListElement(league) {
    return $('<li></li>')
        .append($('<a></a>')
            .html(league.name)
            .attr('href', '?league=' + league.key)
            .click(function() {
                showLeague(league);
                return false;
            })
        )
    ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM