在Internet explorer中,在变量中存储最亲和父节点是不工作的



所以我有

<table class="the-table">
<tr>
<td>
<a class="clickthis">YO!</a>
</td>
</tr>
</table>

然后

$('.clickthis').click(function(){
    alert($(this).closest('.the-table').html()); 
    parent = $(this).closest('.the-table');
    alert(parent.html());
    alert($(parent).html());
 });

但是在internet explorer中,第一个警报将正确地警告表,第二个警报将返回html()不支持的错误,第三个警报将警告空…

另一方面,在Firefox中,所有内容都会正确地提醒html

如何将jquery对象存储在IE的变量中,这样你就可以做上面的事情了?

我也试过使用parents()而不是nearest(),但它仍然不起作用

将其更改为这个,它可以在IE上工作:

$('.clickthis').click(function(){
    alert($(this).closest('.the-table').html()); 
    var parent = $(this).closest('.the-table');
    alert(parent.html());
    alert($(parent).html());
 });

显然,IE与一个名为parent的全局变量有某种冲突。当你将该变量设置为局部变量时,它就会起作用。

正如mu is too short指出的,这可能是与window.parent的冲突,IE9可能正确地使其成为只读,因为它不是你应该能够改变的东西。

这是为什么隐式全局变量(例如未声明的变量)是一个非常非常糟糕的做法的另一个原因。

尝试使用varparents():

$('.clickthis').click(function(){
    var parent = $(this).parents('.the-table');
    alert(parent.html());
});

现场演示:http://jsfiddle.net/JhwcZ/

可以在ie11下运行

$("#grid").kendoGrid({
    change: function(e) {
    var selected = this.select();
     selectedDataItems = [];
      for (var i = 0; i < selected.length; i++) {
        var dataItem = this.dataItem($(selected[i]).closest("tr"));
        selectedDataItems.push(dataItem);
       }
      }
    });

最新更新