jQuery Seçici: Kimlik Bitiyor mu?


393

Bir var mı selectorben belirli bir dizeye sahip bir kimlikle elemanları olduğunu uçlarını sorgulayabilir mi?

Diyelim ki kimliğine sahip bir elementim var ctl00$ContentBody$txtTitle. Bunu sadece geçerek nasıl alabilirim txtTitle?


16
eski iyi ana sayfa kimliği mangling!
Matthew Lock

1
ClientIDMode=staticASP.Net 4.0'dan itibaren ayarlayın ve bundan kurtulun :)
Murali Murugesan

1
ClientIDMode = statik bir tekrarlayıcıda bir eleman bulmaya çalışanlar için çalışmaz!
Stuart

Yanıtlar:


629

Öğe türünü biliyorsanız: (örneğin: 'element' yerine 'div' yazın)

$("element[id$='txtTitle']")

Eleman türünü bilmiyorsanız:

$("[id$='txtTitle']")

Daha fazla bilgi mevcut



10
'$ TxtTitle' ile biten ararım. 'Txt' önekiyle ilgili bir risk değildir, ancak seçiciniz 'NameTextBox' ise, 'NameTextBox', 'FirstNameTextBox', LastNameTextBox 'vb.İle eşleşir
Mark

11
Anonim bir kullanıcı sadece aşağıdakileri düzenlemeye çalıştı. Yorum olarak ekleme (anlamlı göründüğü gibi): Bu, txtTitle id ile biten öğeleri vermez. İşte dokümanlar: api.jquery.com/element-selector ..element selector getElementsByTagName ile eşdeğerdir. Elemanın kimliğiyle hiçbir ilgisi yok. İd ile biten öğelere erişmek istiyorsanız, bu sözdizimini $ ("[id $ = 'txtTitle']") kullanın veya ..eg div .. öğesinin türünü biliyorsanız, bu sözdizimini $ ("div [id $ = 'txtTitle'] ")
Pekka

1
Bağlantı çok faydalı oldu. Sayfa kendi kendine değil, ama ihtiyacım olan 2 ek sayfaya ayrıldı. Bir Kaynak bölümlerini nasıl yakalayacağımı öğrendim, örneğin ID Kaynakta "masterPage1_Control0_MyTableName_moreStuff" gibi görünüyorsa, $ ("id *" kullanarak <asp: Table ID = "MyTable" ... tabloma kilitlenebilir = MyTable] "). Düşünmeye gel, ben daha iyi id $ seviyorum. Hmmm ...
Lukas

Bu elementi bulur document.getElementById("f:fTest:j_idt51:0:inpTest"). Bu olmaz $("[id$='inpTest']"). ID'de iki nokta üst üste işaretine izin verilmediğinden (ancak JSF ekledi!)?
Panu Haaramo

Bu seçiciyi sahte seçiciler gibi CSS ile kullanmanın bir yolu var mı?
Alejandro Nava

250

Sorunun cevabı $("[id$='txtTitle']"), Mark Hurd cevap olarak , ama benim gibi, bir kimliğe sahip tüm unsurları bulmak isteyen, olanlar için başlar (örneğin txtTitle için) belirli bir dizeye, bu (deneyin doc ):

$("[id^='txtTitle']")

Belirli bir dize ( doc ) içeren kimliğe sahip öğeleri seçmek istiyorsanız :

$("[id*='txtTitle']")

Kimliği belirli bir dize ( doc ) olmayan öğeleri seçmek istiyorsanız :

$("[id!='myValue']")

(ayrıca belirtilen özniteliğe sahip olmayan öğelerle de eşleşir)

Boşluğa göre ayrılmış bir kimliğe sahip belirli bir kelime içeren öğeleri seçmek istiyorsanız ( doc ):

$("[id~='myValue']")

Belirli bir dizeye eşit veya o dizeden başlayarak kısa çizgi ( doc ) ile başlayan kimliğe sahip öğeleri seçmek istiyorsanız :

$("[id|='myValue']")

Aslında soruyu cevaplayana yani $ ("[id $ = 'txtTitle']") ekleyip listeye koyarsanız cevabınızı oylayabilirim. Şu anda yapamam çünkü soruyu cevaplamıyorsunuz
Alan Macdonald

2
@AlanMacdonald Eklemenin doğru olduğundan emin değilim. Soruyu, ziyaretçiler için daha fazla bilgi eklemek amacıyla, bir yanıt kabul edildikten uzun bir süre sonra yanıtladım. Umarım cevabımı onaylayanlar da sorunun cevabını kaldırırlar.
Romain Guidoux

1
@RomainGuidoux yeterince adil sizin çağrınız, ancak sorulan soruya bir çözüm sunmayan cevapları oylamıyorum çünkü sayfaya gelip OP ile aynı sorunu yaşayan yeni başlayanlar için açık değil ve bir yukarı var soruya cevap bile vermeyen bir oy kullandı. Soruyu cevaplamak için değiştirdiyseniz, daha dolgun ve daha yararlı bir cevap olduğu için, kabul edilen cevap yerine cevabınızı yükseltirim. Eter bu ya da sorunun cevabı yerine kabul edilen cevap hakkında bir yorum olmalıydı.
Alan Macdonald

1
@AlanMacdonald Bitti, beni ikna ettin.
Romain Guidoux

33

Deneyin

$("element[id$='txtTitle']");

düzenleme: 4 saniye geç: P


32
$('element[id$=txtTitle]')

Eşleştirdiğiniz metin parçasını alıntılamak kesinlikle gerekli değildir


2
Bu doğru cevap olmalı! "Ve" kullanmak sadece kafa karıştırıcıdır.
Kees C. Bakker

13

Alt çizgiyi veya $'ı aradığınız terime eklemek daha güvenlidir, bu nedenle aynı kimlikle biten diğer öğelerle eşleşmesi daha az olasıdır:

$("element[id$=_txtTitle]")

nerede ( eleman eleman türüdür bulmak için çalışıyoruz - örneğin div, inputvs.

(Not, kimliklerinizde $ işaretleri olduğunu öneriyorsunuz, ancak .NET 2'nin artık kimlikte alt çizgi kullanma eğiliminde olduğunu düşünüyorum, bu nedenle örneğimde bir alt çizgi kullanılıyor).


1
Evet haklısın. Kimlik özelliği alt çizgi kullanır. Name özelliği dolar işareti kullanır.
Josh Stodola

3

Bir örnek: <a>_edit ile biten kimliği olan tüm öğeleri seçmek için:

jQuery("a[id$=_edit]")

veya

jQuery("a[id$='_edit']")

3

Bu ASP.NET olduğundan, oluşturulan txtTitle ClientID'sini yazdırmak için ASP <% =%> etiketini kullanabilirsiniz:

$('<%= txtTitle.ClientID %>')

Bu ...

$('ctl00$ContentBody$txtTitle')

... sayfa oluşturulduğunda.

Not: Visual Studio'da Intellisense, ASP etiketlerini JavaScript'e yerleştirdiğiniz için size bağırır. Sonuç geçerli JavaScript olduğu için bunu göz ardı edebilirsiniz.


4
OP'nin sahip olmadığı 'ctl00$ContentBody$txtTitle', sahip 'txtTitle'olduğu ve# bir kimliğe uygun liderliği kaçırdığınız . Ancak OP zaten benzer bir öneriyi reddetti (silindiğinden beri): Javascriptimi doğrudan örgütsel bir kabus olan biçimlendirmeye koymadıkça bu işe yaramayacak. Davranışsal ayrılma bu proje için çok önemlidir.
Martijn Pieters

1

Bunu dene:

<asp:HiddenField ID="0858674_h" Value="0" runat="server" />

var test = $(this).find('[id*="_h"').val();

0

Birçok iframe içeren bir sayfada "iFrame" ile biten bir iframe kimliği bulmak için.

jQuery(document).ready(function (){     
                  jQuery("iframe").each(function(){                     
                    if( jQuery(this).attr('id').match(/_iFrame/) ) {
                            alert(jQuery(this).attr('id'));

                     }                   
                  });     
         });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.