Хранение ближайших и родителей в переменной не работает в Internet Explorer - PullRequest
0 голосов
/ 19 декабря 2011

, поэтому у меня есть

<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 в переменной вТо есть, что вы можете сделать выше?

Я также пытался использовать parent () вместо closest (), но он все равно не работал

Ответы [ 3 ]

3 голосов
/ 19 декабря 2011

Измените это на это, и это работает на 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, возможно, правильно делает доступным только для чтения, поскольку это не то, что вы должны изменить.

Еще одна причина, по которой неявные глобальные переменные (например, необъявленные переменные) - это действительно очень плохая практика.

1 голос
/ 19 декабря 2011

Попробуйте использовать var и parents():

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

Демонстрационная версия: http://jsfiddle.net/JhwcZ/

0 голосов
/ 23 сентября 2016

Это будет работать в IE 11

$("#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);
       }
      }
    });
...