8 Stimmen

Alternative für jQuery attr() in IE?

Ok, korrigieren Sie mich, wenn ich falsch liege, aber ich nehme an, dass jQuery attr() funktioniert NICHT im IE ( markiert wontfix ) Was ist in diesem Fall die beste Alternative? Dies funktioniert zum Beispiel überall, außer im IE:

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

更新しました。 Ups...ich habe das Problem erkannt. Ich hatte das eigentlich in einer if Anweisung auf der Grundlage einer CSS3-Medienabfrage. Medienabfragen, die im IE8 oder niedriger nicht nativ unterstützt werden. Die attr() funktioniert definitiv!

8voto

T.J. Crowder Punkte 948310

Ich benutze attr con data-* Attribute auf IE die ganze Zeit, ich habe noch nie ein Problem gehabt. Hier ist eine Live-Version wurde gerade im IE6, IE7 und IE9 getestet. Ich habe meine IE8-Box nicht zur Hand, aber auch hier hatte ich noch nie ein Problem.

5voto

rossipedia Punkte 51924

Ich hatte noch nie ein Problem mit attr() funktioniert im IE. Die Beschreibung des aufgeführten Fehlers lautet:

JQuery-Funktion .attr funktioniert nicht unter IE, wenn Attribut Ereignis ist wie .attr("onchange", "alert('Hallo Ereignis onchange!')"); . Das ist weil der IE dies nicht versteht. Sie können prüfen, ob das Attribut Ereignis ist, machen Sie eine eval-Funktion, wenn IE.

Konkret geht es um folgende Punkte Veranstaltungen . Normale Attribute sollten kein Problem sein.

4voto

thecodeparadox Punkte 84579

Bitte versuchen Sie dies:

$this.data('websrc'); anstelle von $this.attr('data-websrc');

1voto

exoboy Punkte 2000

Ich hatte ein ähnliches Problem. Ich hatte einige Formulare, bei denen ich einfach festlegen wollte, ob das Feld erforderlich war oder nicht. Meine Formulareingabe sah wie folgt aus:

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

Es funktionierte in allen Programmen außer dem IE9 hervorragend! Oje!

Das Problem ist, dass ich nicht die neue Eigenschaft mit jQuery setzen möchte, und ich möchte nicht den Prototyp für Eingabeelemente erweitern.... Ich möchte nur eine Lösung, die in allen Browsern ohne eine Menge zusätzlichen Code oder Verzweigungen funktioniert.

Ich habe die prop()-Methode von jQuery ausprobiert, aber auch hier musste sie manuell eingestellt werden. Ich wollte etwas, das alle DOM-Elemente als geladen und extrahieren die Daten auf diese Weise nehmen würde.

Ich habe festgestellt, dass die jQuery attr()-Methode in allen Browsern außer IE9 funktioniert. Nachdem ich eine Weile darin herumgestochert hatte, wurde mir klar, dass das Attribut zwar vorhanden war, aber im IE9 ein wenig anders behandelt wurde.

Also habe ich die Werte auf diese Weise abgerufen:

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

Es ist nicht perfekt, aber es funktionierte hervorragend und ich musste nicht zurückgehen und meine Attribute mit "data-" umbenennen oder sie zuweisen, nachdem das DOM geladen war.

Wäre es nicht großartig, wenn jQuery 1.6.x diese Änderung der attr() und prop() Methoden für uns hinzufügen würde!

Wenn jemand eine elegantere Lösung kennt, die KEINE EINSTELLUNG DES ATTRIBUTS NACH DEM SEITENLADEN ERFORDERT, dann lassen Sie es mich bitte wissen.

1voto

cacheflowe Punkte 739

Es scheint, dass attr() im IE fehlschlägt, wenn Sie einen Attributnamen in gemischter Großschreibung verwenden. Achten Sie darauf, für Ihre Attributnamen ausschließlich Kleinbuchstaben zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X