JQuery'nin aşağıdaki ifadenin id eşdeğeri nedir?
$('#mydiv').hasClass('foo')
böylece bir sınıf adı verebilir ve verilen bir kimlik içerip içermediğini kontrol edebilirsiniz.
gibi bir şey:
$('.mydiv').hasId('foo')
JQuery'nin aşağıdaki ifadenin id eşdeğeri nedir?
$('#mydiv').hasClass('foo')
böylece bir sınıf adı verebilir ve verilen bir kimlik içerip içermediğini kontrol edebilirsiniz.
gibi bir şey:
$('.mydiv').hasId('foo')
$('#bar.foo').toggle();, belgeye özel olması GEREKTİRDİĞİ için yalnızca bir kimliğe sahip olacaksınız. Bu kimliği yalnızca sınıfsa değiştirmeyi düşünüyorsanız, fooo zaman sınıfı id seçiciye ekleyin. seçici boş bir küme bulursa hiçbir şey olmayacak, sonuçlarla (bunlardan yalnızca bir tane olacak) bir küme bulursa, o zaman elemanı değiştirecektir. bence bunu çok düşünüyorsun.
Yanıtlar:
Birden çok seçiciyi birleştirerek bu mantığı seçicide pişirebilirsiniz . Örneğin, belirli bir sınıfa sahip, belirli bir kimliği olan tüm öğeleri hedefleyebiliriz:
$("#foo.bar"); // Matches <div id="foo" class="bar">
Bu, CSS'de yazacağınız bir şeye benzemelidir. Tüm #fooöğeler için geçerli olmayacağını (ancak yalnızca bir tane olması gerekir) ve tüm .baröğeler için geçerli olmayacağını unutmayın (çok sayıda olsa da). Yalnızca her iki öznitelikte de nitelendirilen öğeleri referans alacaktır.
jQuery ayrıca, bir öğenin belirli niteliklere sahip olup olmadığını belirlemenizi sağlayan harika bir .isyönteme sahiptir. Bir jQuery koleksiyonunu bir dize seçici, bir HTML Öğesi veya başka bir jQuery nesnesine karşı test edebilirsiniz. Bu durumda, onu bir dizi seçiciye göre kontrol edeceğiz:
$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo'
is(). Bir .hasId()seçici olmalı çünkü .hasClass()gerçekten bariz bir ortak gibi göründüğü için ...
Muhtemelen bunu kullanırdım $('.mydiv').is('#foo');, eğer kimliği biliyorsanız neden ilk başta seçiciye uygulamıyorsunuz?
idveriye sahip olmalı, aksi takdirde başka bir öznitelik olmalıdır ... Sanırım, söz konusu elemanın yapısal konumu sayfaya veya istemci / kullanıcı aracısına göre değişirse tamam, ancak bunun dışında .. .
güncelleme: üzgünüm soru yanlış anlaşıldı, .has()cevap kaldırıldı .
başka bir alternatif yol, .hasId()eklenti oluştur
// the plugin
$.fn.hasId = function(id) {
return this.attr('id') == id;
};
// select first class
$('.mydiv').hasId('foo') ?
console.log('yes') : console.log('no');
// select second class
// $('.mydiv').eq(1).hasId('foo')
// or
$('.mydiv:eq(1)').hasId('foo') ?
console.log('yes') : console.log('no');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mydiv" id="foo"></div>
<div class="mydiv"></div>
Diyelim ki bazı DOM nesneleri arasında yineleme yaptığınızı ve belirli bir kimliğe sahip bir öğeyi bulup yakalamak istediğinizi
<div id="myDiv">
<div id="fo"><div>
<div id="bar"><div>
</div>
Bulmak gibi bir şey yazabilirsin
$('#myDiv').find('#bar')
Bir sınıf seçici kullanıyorsanız, find yönteminin tüm eşleşen öğeleri döndüreceğini unutmayın.
ya da daha gelişmiş işler yapacak yinelenen bir işlev yazabilirsiniz
<div id="myDiv">
<div id="fo"><div>
<div id="bar"><div>
<div id="fo1"><div>
<div id="bar1"><div>
<div id="fo2"><div>
<div id="bar2"><div>
</div>
$('#myDiv div').each(function() {
if($(this).attr('id') == 'bar1')
//do something with bar1
});
Aynı kod, sınıf seçici için kolayca değiştirilebilir.
<div id="myDiv">
<div class="fo"><div>
<div class="bar"><div>
<div class="fo"><div>
<div class="bar"><div>
<div class="fo"><div>
<div class="bar"><div>
</div>
$('#myDiv div').each(function() {
if($(this).hasClass('bar'))
//do something with bar
});
Index () ile probleminizi çözdüğünüz için memnunum, sizin için işe yarayan her şey. Umarım bu aynı problemi yaşayan başkalarına yardımcı olur. Şerefe :)
$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });
#theMysteryId.
Bunu sonunda index () kullanarak çözdüğümü söylemek için.
HİÇBİR ŞEY işe yaradı gibi görünüyordu.
Öyleyse, kardeş öğeler için, önce ortak bir sınıfa göre seçim yapıyorsanız ve ardından her biri için bir şeyi farklı şekilde değiştirmek istiyorsanız, bu iyi bir çözümdür.
DÜZENLEME: Bilmeyenler için (benim gibi) index (), DOM'daki sıralarına bağlı olarak 0'dan başlayarak seçici ile eşleşen her öğe için bir dizin değeri verir. Class = "foo" ile kaç öğe olduğunu bildiğiniz sürece bir id'ye ihtiyacınız yoktur.
Açıkçası bu her zaman yardımcı olmayacaktır, ancak birileri onu yararlı bulabilir.
Öğenin kimliğinin mevcut olup olmadığını kontrol edin
if ($('#id').attr('id') == 'id')
{
//OK
}
Bunu yaparak id öğesinin kullanılıp kullanılmadığını da kontrol edebilirsiniz:
if(typeof $(.div).attr('id') == undefined){
//element has no id
} else {
//element has id selector
}
Bu yöntemi global dataTables ve belirli sıralı dataTables için kullanıyorum