2008-09-18 27 views
33

Sanırım öznitelikler için özel bir ad alanı kullanan basit bir XHTML belgesine sahibim:jQuery özellik seçicileri: Özel ad alanına sahip bir özellik nasıl sorgulanır?

<html xmlns="..." xmlns:custom="http://www.example.com/ns"> 
    ... 
    <div class="foo" custom:attr="bla"/> 
    ... 
</html> 

jQuery kullanarak belirli bir özel niteliğe sahip her bir öğeyi nasıl eşleştirebilirim? Xzx21

$("div[custom:attr]") 

kullanılmıyor. (Sadece Firefox ile çalıştı, şu ana kadar.)

+0

Update, Suphi'nin cevabı çok daha basit sözdizimi ve çalışır. Yine de herhangi bir performans karşılaştırması yapmadım. –

+0

Ad alanı öneki bildirimi xmlns olması gerekiyor mu: custom =? – grantwparks

cevap

42

('özel attr'), ama aradığınız parçaları, filtre işlevini kullanarak bulabilirsiniz.

// find all divs that have custom:attr 
$('div').filter(function() { return $(this).attr('custom:attr'); }).each(function() { 
    // matched a div with custom::attr 
    $(this).html('I was found.'); 
}); 
+0

Böyle bir şeyden korktum. Teşekkürler! –

3

burada http://pastebin.me/48d233d998b4b

temelde $ ('div') attr bak.: JQuery doğrudan özel ad alanlarını desteklemez

+1

Görevimi açıklığa kavuşturdum: Özel bir niteliğe sahip her bir öğeyle eşleşmek istiyorum, özniteliğin değerini alamıyorum. –

+0

@redsquare: Bu, tarayıcıların çoğu için çalışır, ancak Opera'da başarısız olur. Bunun için herhangi bir hızlı düzeltme? – Gapipro

19

Bu, bazı koşullarda çalışır:

$("div[custom\\:attr]")

Ancak, daha gelişmiş bir yöntem için, özniteliği tarafından eşleştirme için this XML Namespace jQuery plug-in

+0

İsim alanı eklentisi bir rüyadır. –

+0

Bu strateji Safari ve Chrome gibi Webkit tabanlı tarayıcılarda çalışmıyor. Herhangi bir fikir? – kaychaks

+1

+1, küçük bir yan nota sahip: jQuery, ekli HTML parçalarının (gerçekten SVG ile test edilen) HTML parçalarının adlarını tanımlayacaktır. Bu özellik, xmlns: custom = "uri" 'nin' custom = "uri" 'ye dönüştürülmesini, muhtemelen HTML'nin (genellikle?)' Xmlns' özniteliğini kabul etmemesidir. Belgeyi XHTML olarak hizmet vermek sorunu giderir, ancak her durumda pratik olmayabilir. –

7

sözdizimi bakın geçerli:

$ ("div [customattr = bla]") kibritler - div customattr = "bla" -

$ ("[customattr]") eşleşir "customattr" özelliğine sahip tüm etiketler ad ile

gibi özellikleri: Bir iyi bir genel bakış bulabilirsiniz onun İşte

çalışmıyor 'özel attr': http://www.pamaya.com/jquery-selectors-and-attribute-selectors-reference-and-examples/

+0

Bağlantılı makale, özel niteliklere başvurmuyor. –

+2

Bu bir cevap değil. Temel olarak sadece soruyu yeniden düzenliyor ve seçmenlerin isim alanlarıyla çalışmadığını söylüyor. – spaaarky21

2

İşte benim için çalışan özel bir seçicinin uygulamasıdır.

// Custom jQuery selector to select on custom namespaced attributes 
$.expr[':'].nsAttr = function(obj, index, meta, stack) { 

    // if the parameter isn't a string, the selector is invalid, 
    // so always return false. 
    if (typeof meta[3] != 'string') 
     return false; 

    // if the parameter doesn't have an '=' character in it, 
    // assume it is an attribute name with no value, 
    // and match all elements that have only that attribute name. 
    if (meta[3].indexOf('=') == -1) 
    { 
     var val = $(obj).attr(meta[3]); 
     return (typeof val !== 'undefined' && val !== false); 
    } 
    // if the parameter does contain an '=' character, 
    // we should only match elements that have an attribute 
    // with a matching name and value. 
    else 
    { 
     // split the parameter into name/value pairs 
     var arr = meta[3].split('=', 2); 
     var attrName = arr[0]; 
     var attrValue = arr[1]; 

     // if the current object has an attribute matching the specified 
     // name & value, include it in our selection. 
     return ($(obj).attr(attrName) == attrValue); 
    } 
}; 

Örnek kullanım:

// Show all divs where the custom attribute matches both name and value. 
$('div:nsAttr(MyNameSpace:customAttr=someValue)').show(); 

// Show all divs that have the custom attribute, regardless of its value. 
$('div:nsAttr(MyNameSpace:customAttr)').show(); 
İlgili konular