我正在創建一個表示數據綁定表的JavaScript類,使用jQuery來處理DOM操作。該類有一個$table.$body.$rows
屬性,我保留表的jQuery包裝行的集合,以避免在添加或刪除行時執行$table.$body.children('tr')
調用。當一行進入或離開編輯模式時,我需要能夠添加和刪除$table.$body.$rows
屬性中的對象,我使用jQuery的.add()
和.not()
方法完成了該屬性。如何在指定索引處將對象添加到jQuery集合中?
但是,由於.add()
方法將新項目添加到jQuery實例中維護的內部集合的末尾,因此這些方法並不合適,但是當正在編輯的行不在表格的最後時。爲了確保$table.$body.$rows
集合的排序正確,我需要能夠將插入jQuery集合中指定索引處的新項目。這樣的方法已經存在了,還是我要自己寫呢?
我可以讓HTMLTableSectionElement.rows
屬性爲我記錄行,並在必要時將特定行簡單地包裝在jQuery對象中,但這看起來效率不高。這引出了第二個問題:無論如何,像.children('tr')這樣的電話有多昂貴,並且我會更好嗎?每次添加或刪除行時只需重新指定$table.$body.$rows
?
那麼哪種方法更具性能:使用'.children('tr')'更新'$ table。$ body。$ rows'或者根據需要用'$()'封裝來自'HTMLTableSectionElement.rows'的行? –
這個差別可以忽略不計。在這兩種情況下,您都是從已經*解析過的DOM節點構建一個jQuery對象,所以在任何情況下都不需要昂貴的(相對而言)DOM查詢。 jQuery [總是優化傳遞DOM元素的情況](https://github.com/jquery/jquery/blob/9d820fbde6d89bc7a06e2704be61cf6c0b4d6e3c/src/core/init.js#L97-L104)。話雖如此......在這裏要注意微觀優化。 0.00000001ms真的很重要嗎?你可以隨時(也應該)簡介它,如果這樣肯定... http://jsperf.com – Matt
這是有道理的。我認爲,當您直接使用HTMLElement對象時,jQuery構造函數邏輯可能非常微不足道,但我不確定。 –