Эти два выражения делают то же самое, но какое из них безопаснее или даже эффективнее?

var indexedCellValue = selectedCell.srcElement.parentElement.cells[index].innerText;

var indexedCellValue = $(selectedCell.srcElement).parent('tr').get(0).cells[index].innerText;

(Как получение ячейки, selectedCell, родительской строки, так и индексация в столбце этой родительской строки.)

5
learnerplates 1 Фев 2013 в 16:44

3 ответа

Лучший ответ

Чистый JavaScript всегда будет быстрее, чем jQuery, но с помощью jQuery вы гарантируете, что код будет работать в большинстве браузеров.

4
davids 1 Фев 2013 в 12:49

В jQuery вы выбираете только те элементы, у которых есть tr родительский элемент. Я также думаю, что чистая версия javascript будет работать на Firefox 9+, но не на старых.

Если вы посмотрите на исходный код jQuery, определите parent() (строка 5666, начиная с версии 1.9.0):

parent: function( elem ) {
    var parent = elem.parentNode;
    return parent && parent.nodeType !== 11 ? parent : null;
},

Вы видите, что он не использует parentElement, но parentNode, который больше поддерживается браузерами (в первую очередь, не старыми версиями Firefox, фактически он не был поддержан до версии 9, если вы хотите узнать разницу между ними, посмотрите этот ответ: Разница между DOM parentNode и parentElement ) .

Он также проверяет, является ли узел DOCUMENT_FRAGMENT_NODE (честно говоря, я не знаю, почему это так, если кто-то знает, что мне это будет интересно).

В ветке разработки 2.0, которая не поддерживает старые браузеры (спасибо pimvdb), они переключились на parentElement (Уменьшить модуль обхода - зафиксировать):

parent: function( elem ) {
    return elem.parentElement;
},
1
Community 23 Май 2017 в 12:04

Вот оптимизированное решение JQuery

var indexedCellValue = $($(selectedCell.srcElement).parent('tr').children()[index]).text();

Не используя parentElement, ячейки или innerText.

Спасибо за помощь.

0
learnerplates 1 Фев 2013 в 15:17