Альтернатива для jQuery attr () в IE? - PullRequest
8 голосов
/ 13 августа 2011

Хорошо, поправьте меня, если я ошибаюсь, но я понимаю, что jQuery attr() НЕ работает в IE.( отмечено wontfix ). В таком случае, что является лучшей альтернативой?Например, это работает везде, но IE:

jQuery(document).ready(function($) {
    $('.airsrc').each(function() {
        var $this = $(this);
        var src = $this.attr('data-websrc');
        $this.attr('src', src);
    });
});

Обновление: Упс ... Я понимаю проблему.На самом деле это было внутри оператора if, основанного на медиазапросе CSS3.Медиа-запросы, которые изначально не поддерживаются в IE8 или ниже.attr() определенно работает!

Ответы [ 5 ]

7 голосов
/ 13 августа 2011

Я использую attr с data-* атрибутами в IE все время, у меня никогда не было проблем. Вот живая версия , только что протестированная в IE6, IE7 и IE9.У меня под рукой нет моего IE8, но опять же, у меня никогда не было проблем.

5 голосов
/ 13 августа 2011

У меня не было проблем с attr(), работающим в IE.Ниже приведено описание ошибки:

Функция JQuery .attr не работает в IE, когда атрибут является событием типа .attr ("onchange", "alert ('Hello event onchange!')");,Это потому, что IE не понимает этого.Вы можете проверить, если атрибут является событием, сделать функцию eval, если IE.

В частности, это имеет отношение к events .Обычные атрибуты не должны быть проблемой.

4 голосов
/ 13 августа 2011

пожалуйста, попробуйте это:

$this.data('websrc'); вместо $this.attr('data-websrc');

1 голос
/ 17 ноября 2011

У меня была похожая проблема. У меня были некоторые формы, которые я хотел легко установить, было ли поле обязательным или нет. Моя форма ввода выглядела так:

< input id="myid" name="myname" type="text" required="true" />

Отлично работал во всем, кроме IE9! Doh!

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

Я попробовал метод prop () в jQuery, но, опять же, его нужно было установить вручную. Я хотел что-то, что будет принимать все элементы DOM как загруженные и извлекать данные таким образом.

Я обнаружил, что метод attQ () jQuery работает во всех браузерах, кроме IE9. Поработав некоторое время, я понял, что атрибут был там, но чтение его обрабатывалось немного по-другому в IE9.

Итак, я вспомнил значения следующим образом:

var val = $('#elementID').attr('required') || $('#elementID')[0].getAttribute('required');

Он не идеален, но он работал отлично и не требовал от меня возврата и переименования моих атрибутов с помощью «data-» или назначения их после загрузки DOM.

Не было бы замечательно, если бы jQuery 1.6.x добавил это изменение для методов attr () и prop () для нас!

Если кто-нибудь знает более элегантное решение, которое НЕ ТРЕБУЕТ УСТАНОВКИ АТРИБУТА ПОСЛЕ ЗАГРУЗКИ СТРАНИЦЫ, то, пожалуйста, дайте мне знать.

0 голосов
/ 26 января 2012

Похоже, что attr () потерпит неудачу в IE, если вы используете смешанное имя атрибута.Обязательно используйте все строчные буквы для имен ваших атрибутов.

...