2014-12-15 19 views
5

Chcę wiedzieć, czy jest możliwe, aby korzystać z funkcji attr() wewnątrz nowej wtyczki:Użyj funkcji attr() w nowej wtyczce?

(function ($) { 
    $.fn.resetColor = function() { 
     var oldColor=this.attr("memColor"); 
     this.css('background-color',oldColor); 
    }; 
})(jQuery); 

Próbowałem powyższy kod, ale to nie działa. Jestem pewien, że atrybut memColor istnieje, ponieważ przetestowałem go z alertem w bloku $(document).ready.

+0

Kwestia jest taka, że ​​jeśli jest więcej niż jeden element w kolekcji jQuery, następnie 'this.attr()' jest będzie tylko pobierać atrybut 'memColor' z jednego elementu w kolekcji, a następnie będzie stosowany do wszystkich z nich. – jfriend00

Odpowiedz

5

JQuery plugin authoring guidelines polecić tę metodę:

(function ($) { 
    $.fn.resetColor = function() { 
     return this.each(function() { 
      var elem = $(this); 

      var oldColor = elem.attr("memColor"); 
      elem.css('background-color',oldColor); 
     }; 
    }); 
}(jQuery)); 
  1. zakładają plugin nazywa na zestawie elementów.
  2. Uzyskaj element owinięty jQuery do pracy.

także mieć świadomość, że istnieje różnica między właściwości (prop()) i atrybuty (attr()), były odnosi się do nieruchomości o JavaScript DOM HTMLElements, a później odnosi się do atrybutów HTML, jak są one określone w znaczniku. I jQuery czyni to rozróżnienie również od wersji 1.6:

Różnica między atrybutami i właściwościami może być ważna w określonych sytuacjach. Przed wersją 1.6 jQuery metoda .attr() czasami uwzględniała wartości właściwości podczas pobierania niektórych atrybutów, co może powodować niespójne zachowanie. Od wersji jQuery 1.6 metoda .prop() zapewnia sposób jawnego pobierania wartości właściwości, natomiast .attr() pobiera atrybuty.


Demo:

(function ($) { 
 
     $.fn.resetColor = function() { 
 
      return this.each(function() { 
 
       var elem = $(this); 
 

 
       var oldColor = elem.attr("memColor"); 
 
       elem.css('background-color',oldColor); 
 
      }); 
 
     }; 
 
    $('.me').resetColor(); 
 
    }(jQuery)); 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="me" memColor="Red">Lorem ipsum.</div> 
 
<div class="me" memColor="Blue">Lorem ipsum.</div>

+0

To nie działa, udało mi się zmienić kolor moich bloków na czarny, zamieniając oldColor na "czarny" w moim pierwszym skrypcie. Może problem wynika z użycia zmiennej oldColor. – Neo

+1

Czy wykonałeś debugowanie 'this.attr (" memColor ")', a nawet 'this', aby zobaczyć, z czym pracujesz? Czy możesz stworzyć skrzypce lub coś, co pozwoli ci zobaczyć twoją dokładną sytuację? –

Powiązane problemy