对象不支持属性或方法’最接近’

我刚刚得到的信息是我的jQuery函数不能在IE和Edge上运行。 在控制台中我有消息:

对象不支持属性或方法’最接近’

这是jQuery:

$('body').on('change', 'select', function (event) { if(event.target.id.indexOf("couche") >= 0) { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: event.target.id, value: event.target.value, iscouche: "True" }, }).done(function (msg) { if(msg.nothing == 1) { var what = event.target.closest('tbody'); $(what).find("tr:gt(0)").remove(); } else { var add = event.target.closest('tr'); var toremove = msg.toremove.split(" "); for(var i = 0; i  0) { jQuery(toremove[i]).remove(); } } jQuery(add).after(msg.ret); } }); } else { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: event.target.id, value: event.target.value, iscouche: "False" }, }).done(function (msg) {}); } }); 

有人能告诉我是否有解决办法吗?

event.target是一个DOM节点,而不是一个jQuery对象,所以没有jQuery方法

在jQuery中使用$(this)这是一个jQuery对象。

如果你不需要,我也建议你不要使用目标。

更新:较新的浏览器现在最接近 DOM方法,因此OP代码可以在IE以外的新浏览器中使用。

这是一个固定的jQuery版本:

 $('body').on('change', 'select', function(event) { var $sel = $(this), // the changed select id = this.id, // or $(this).attr("id"); val = $(this).val(); // or this.value if (id.indexOf("couche") >= 0) { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: id, value: val, iscouche: "True" }, }).done(function(msg) { if (msg.nothing == 1) { var what = $sel.closest('tbody') $(what).find("tr:gt(0)").remove(); } else { var add = $sel.closest('tr'); var toremove = msg.toremove.split(" ") for (var i = 0; i < toremove.length; i++) { if (toremove[i].length > 0) { jQuery(toremove[i]).remove(); } } jQuery(add).after(msg.ret); } }); } else { $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: id, value: val;, iscouche: "False" }, }).done(function(msg) {}); } }); 

或更整洁:

 $('body').on('change', 'select', function(event) { var $sel = $(this), // the select changed id = this.id, isCouche = id.indexOf("couche") != -1, val = $(this).val(); $.ajax({ url: "{{ redir2 }}", type: "POST", data: { ident: id, value: val, iscouche: isCouche ? "True" : "False"; }, }).done(function(msg) { if (isCouche) { if (msg.nothing == 1) { var what = $sel.closest('tbody') $(what).find("tr:gt(0)").remove(); } else { var add = $sel.closest('tr'); var toremove = msg.toremove.split(" ") for (var i = 0; i < toremove.length; i++) { if (toremove[i].length > 0) { $(toremove[i]).remove(); } } $(add).after(msg.ret); } } else { // handle not couche } }); }); 

closest()是在jQuery原型上定义的,它不能用在普通的JavaScript对象上。

event.target是发生事件的DOM元素,要在其上使用jQuery方法,该元素需要包装在jQuery中。

更改

 var what = event.target.closest('tbody') 

 var what = $(event.target).closest('tbody') 

Yuo必须将它包含在$()因为event.target不是jQuery元素

  $(event.target).closest('tr')