2011-09-29 11 views
15

Chcę utworzyć selektor, aby znaleźć elementy, które mają atrybuty zaczynające się od ciągu. W tym momencie zakładam, że ten selektor nie istnieje. Czy muszę rozszerzyć możliwości selektora? Extending jQuery’s selector capabilities autor: James PadolseyJak znaleźć elementy, które zawierają atrybut data- * pasujący do prefiksu za pomocą jquery

Muszę wyrazić coś takiego, jak atrybut Zawiera selektor prefiksu [nazwa | = "wartość"], ale zamiast dopasowywać "wartość", muszę dopasować do nazwy atrybutu, a nie do wartość atrybutu.

<tag data-plugin-option1="val1" data-plugin-option2="val2" />

Chciałbym skończyć z składni tak: $('tag(:attr|="data-plugin")') które powinny znaleźć element tag dlatego, że ma co najmniej jeden element, który zaczyna się data-plugin

+2

myślę '.data()' analizuje je automatycznie, chociaż może to być po prostu w HTML 5, nie pamiętam teraz –

+2

@Pekka: Myślę, że OP szuka selektora, który zwraca * elementy *, które mają pasującą nazwę atrybutu (lub częściową nazwę). – user113716

+0

Tak, szukam selektora, który zwraca elementy. – JJS

Odpowiedz

11

Cóż, myślę, inaczej czytam twoje pytanie.

Sposób, w jaki go odczytam, chcesz utworzyć niestandardowy selektor, który wybiera elementy, które mają daną nazwę atrybutu (lub początek tej nazwy).

Jeśli tak, to powinieneś iterować kolekcję attributes dla każdego elementu.

DEMO:http://jsfiddle.net/GgmM7/

$.extend($.expr[':'],{ 
    attrNameStart: function(el,i,props) { 

     var hasAttribute = false; 

     $.each(el.attributes, function(i,attr) { 
      if(attr.name.indexOf(props[3]) !== -1) { 
       hasAttribute = true; 
       return false; // to halt the iteration 
      } 
     }); 

     return hasAttribute; 
    } 
}); 

$('img:attrNameStart(data-plugin)') 
+0

to piękny kod. Nie jestem pewien, dlaczego jestem tak nieobecny, że zapomniałem o właściwości 'attributes' na elemencie dom. Dzięki wielkie! – JJS

+0

@JJS: Nie ma za co. – user113716

+0

Po prostu niesamowite. Dzięki. – itslittlejohn

Powiązane problemy