2013-03-27 117 views
3

下面是我得到了什麼:是否可以在插入DOM樹之前獲取jQuery創建元素的HTML?

gridComplete: function() { 
    var doneButton = $('<input>', { 
     type: 'button', 
     value: 'Done', 
     click: function() { 
      alert("Done!"); 
     } 
    }); 

    console.log("HTML:", doneButton.html()); 

    var ids = $(this).jqGrid('getDataIDs'); 
    var self = this; 
    _.each(ids, function(id) { 
     $(self).jqGrid('setRowData', id, { 
      MarkDone: doneButton.html() 
     }); 
    }); 
} 

如果我只是嘗試,並插入doneButton對象時,jqGrid的細胞呈現,而不是實際的按鈕[對象的對象。因此,我可以推斷它期望原始HTML。但是,doneButton.html()返回一個空字符串...大概是因爲我還沒有將doneButton對象添加到文檔中。

有沒有一個與jQuery這樣做的技巧?我更喜歡生成HTML標記的更清潔/更安全的語法,但我可以這樣做:

gridComplete: function() { 
    var doneButtonHtml = "<input type='button' value='Done' onclick=\"alert('Done');\" />"; 

    var ids = $(this).jqGrid('getDataIDs'); 
    var self = this; 
    _.each(ids, function(id) { 
     $(self).jqGrid('setRowData', id, { 
      MarkDone: doneButtonHtml 
     }); 
    }); 
}, 

它按預期呈現按鈕。

回答

1

您從您的按鈕中獲得一個空字符串,因爲html()返回內部HTML。

你可能想doneButton.get(0).outerHTML

+0

這工作。謝謝!我試着在jQuery元素本身上調用outerHTML,並被告知它沒有方法 - 所以我在錯誤的軌道上跳下了。哎呀。 – 2013-03-27 17:28:26

0

更改此:

MarkDone: doneButtonHtml.html() 

要:

MarkDone: doneButtonHtml.get(0) 

doneButtonHtml是一個DOM元素數組。您需要撥打獲取(0)以獲取該數組中的第一個元素。

0

首先要記住的是.HTML()實際上檢索元素內部的html,而不是元素本身的html。

如果您從jQuery數組對象訪問Javascript元素,則應該返回原始HTML。看看這個小提琴:http://jsfiddle.net/NvKYT/

var doneButton = $('<input>', { 
    type: 'button', 
    value: 'Done', 
    click: function() { 
     alert("Done!"); 
    } 
}); 

//doneButton[0] - your html 

嘗試通過doneButton [0],因爲這是實際的元素,而不是jQuery的包裝元素。

1

如果我正確理解你想要什麼,你可以用另一種方法做同樣的事情。要減少jqGrid構建網格體的web browser reflows數量斷開連接,然後將其插入到一個。必須使用gridview: true才能獲得性能優勢。問題只在於,jqGrid將網格體構建爲HTML字符串,而不是DOM。 jqGrid提供自定義格式化器,cellattr和rowattr回調函數,允許構建自定義列內容或設置行上的一些自定義屬性。有關詳細信息,請參閱the answer

所以,你應該做的是

  1. 提供自定義格式爲MarkDone列與內容"<input type='button' value='Done' />"(不click)事件處理
  2. 使用onCellSelectbeforeSelectRow回調趕上任何地方click事件格子體包含點擊「完成」按鈕。 The event bubbling(請參閱here)有助於減少網格中所需的事件句柄數量。$td = $(e.target).closest("td")會爲您提供被點擊的單元格,iCol = $.jgrid.getCellIndex($td[0])會爲您指定列號,this.p.colModel[iCol].name會爲您提供點擊列的名稱。

The answeranother onethe oldest one會得到你需要你的代碼示例和其他信息。

相關問題