2016-09-07 2 views
3

В IE11 ниже код показывает следующее сообщение об ошибке, но он работает в ChromeИспользование JavaScript `this.closest` в IE11 и Chrome

Объект не поддерживает свойство или метод«closest'4: 31 PM 09/07/16

assetTable.on("click", "td.clickProgress", function onDataTableRowClicked(event) { 
    var tr = this.closest("tr"); 
    var assetId = tr.id.replace("asset_", ""); 
    LoadDialog(assetId); 
} 

Однако, когда я изменить его на $(this) она работает как в IE и Chrome

assetTable.on("click", "td.clickProgress", function onDataTableRowClicked(event) { 
    var tr = $(this).closest("tr"); 
    var assetId = tr.attr('id').replace("asset_", ""); 
    LoadDialog(assetId); 
} 

Любые причины этой проблемы совместимости между браузерами?

+0

'this' является ссылкой на согласованный элемент, который имеет только свойства DOM. '$ (this)' является ссылкой на коллекцию jQuery, содержащую элемент, который имеет методы/свойства jQuery. Существует * экспериментальная * реализация * ближайшего *; но [вы не должны использовать его] (https://developer.mozilla.org/en-US/docs/Web/API/Element/closest). – Sampson

ответ

7

Отъезд MDN's compatibility table for element.closest. За ссылку:

Это экспериментальная технология Поскольку спецификация этой технологии не стабилизируется, проверьте таблицу совместимости для использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут изменяться в будущих версиях браузеров по мере изменения спецификации.

element.closest - экспериментальная технология, не поддерживаемая в IE. В этом случае вы используете JavaScript this, немодифицированный. Причина, по которой работает $(this).closest, заключается в том, что вы обертываете это в объект jQuery, заставляя его использовать jQuery's closest function.