Odpowiedzi:
Konstruktor jQuery akceptuje drugi parametr o nazwie, context
który można wykorzystać do przesłonięcia kontekstu wyboru.
jQuery("img", this);
To jest to samo, co przy użyciu .find()
takiego:
jQuery(this).find("img");
Jeśli pożądane obrazy są tylko bezpośrednimi potomkami klikniętego elementu, możesz również użyć .children()
:
jQuery(this).children("img");
Możesz także użyć
$(this).find('img');
które zwrócą wszystkie img
potomkidiv
$(this).children('img')
byłoby lepiej. np. <div><img src="..." /><div><img src="..." /></div></div>
ponieważ prawdopodobnie użytkownik chce znaleźć obrazy pierwszego poziomu.
Jeśli potrzebujesz pierwszego, img
który spadł dokładnie o jeden poziom, możesz to zrobić
$(this).children("img:first")
:first
pasuje tylko „ dokładnie o jeden poziom ”, czy też pasuje do „pierwszego”, img
który został znaleziony?
.children()
skąd pochodzi „dokładnie jeden poziom” i stąd :first
„pierwszy”.
.find()
zamiast.children()
this
było już odniesienie do <div>
zawierającego <img>
, jednak jeśli masz wiele poziomów znacznika do przejścia od referencji, którą na pewno posiadasz, to zdecydowanie możesz skomponować więcej niż jedno children()
wywołanie
Jeśli zaraz po tagu DIV następuje tag IMG, możesz także użyć:
$(this).next();
Te bezpośrednie dzieci jest
$('> .child-class', this)
Możesz znaleźć wszystkie elementy img rodzica div jak poniżej
$(this).find('img') or $(this).children('img')
Jeśli chcesz konkretnego elementu img, możesz napisać w ten sposób
$(this).children('img:nth(n)')
// where n is the child place in parent list start from 0 onwards
Twoja div zawiera tylko jeden element img. Więc do tego poniżej jest właściwe
$(this).find("img").attr("alt")
OR
$(this).children("img").attr("alt")
Ale jeśli twoja div zawiera więcej elementów img jak poniżej
<div class="mydiv">
<img src="test.png" alt="3">
<img src="test.png" alt="4">
</div>
wtedy nie można użyć górnego kodu, aby znaleźć wartość alt drugiego elementu img. Możesz więc spróbować:
$(this).find("img:last-child").attr("alt")
OR
$(this).children("img:last-child").attr("alt")
Ten przykład pokazuje ogólną ideę, jak znaleźć rzeczywisty obiekt w obiekcie nadrzędnym. Za pomocą klas można rozróżnić obiekt podrzędny. To łatwe i przyjemne. to znaczy
<div class="mydiv">
<img class='first' src="test.png" alt="3">
<img class='second' src="test.png" alt="4">
</div>
Możesz to zrobić jak poniżej:
$(this).find(".first").attr("alt")
i bardziej szczegółowe, jak:
$(this).find("img.first").attr("alt")
Możesz użyć find lub child jak powyżej. Więcej informacji można znaleźć na stronie Dzieci http://api.jquery.com/children/ i Znajdź http://api.jquery.com/find/ . Zobacz przykład http://jsfiddle.net/lalitjs/Nx8a6/
Sposoby odwoływania się do dziecka w jQuery. Podsumowałem to w następującym jQuery:
$(this).find("img"); // any img tag child or grandchild etc...
$(this).children("img"); //any img tag child that is direct descendant
$(this).find("img:first") //any img tag first child or first grandchild etc...
$(this).children("img:first") //the first img tag child that is direct descendant
$(this).children("img:nth-child(1)") //the img is first direct descendant child
$(this).next(); //the img is first direct descendant child
Nie znając identyfikatora DIV, myślę, że możesz wybrać IMG w następujący sposób:
$("#"+$(this).attr("id")+" img:first")
Wypróbuj ten kod:
$(this).children()[0]
$($(this).children()[0])
.
$(this:first-child)
$($(this).children()[x])
używać $(this).eq(x)
lub jeśli chcesz pierwszy, po prostu $(this).first()
.
Możesz użyć jednej z następujących metod:
1 znaleźć ():
$(this).find('img');
2 dzieci():
$(this).children('img');
jQuery's each
jest jedną z opcji:
<div id="test">
<img src="testing.png"/>
<img src="testing1.png"/>
</div>
$('#test img').each(function(){
console.log($(this).attr('src'));
});
Za pomocą Selecor podrzędny można odwoływać się do elementów podrzędnych dostępnych w ramach elementu nadrzędnego.
$(' > img', this).attr("src");
A poniżej jest, jeśli nie masz odniesienia do $(this)
i chcesz odwoływać się img
w ramach div
innej funkcji.
$('#divid > img').attr("src");
Oto funkcjonalny kod, możesz go uruchomić (to prosta demonstracja).
Kiedy klikniesz DIV, otrzymasz obraz z kilku różnych metod, w tej sytuacji „to” jest DIV.
$(document).ready(function() {
// When you click the DIV, you take it with "this"
$('#my_div').click(function() {
console.info('Initializing the tests..');
console.log('Method #1: '+$(this).children('img'));
console.log('Method #2: '+$(this).find('img'));
// Here, i'm selecting the first ocorrence of <IMG>
console.log('Method #3: '+$(this).find('img:eq(0)'));
});
});
.the_div{
background-color: yellow;
width: 100%;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="my_div" class="the_div">
<img src="...">
</div>
Mam nadzieję, że to pomoże!
Możesz mieć od 0 do wielu <img>
tagów w swoim<div>
.
Aby znaleźć element, użyj .find()
.
Aby zabezpieczyć kod, użyj .each()
.
Użycie .find()
i .each()
razem zapobiega błędom odniesienia zerowym w przypadku 0 <img>
elementów, jednocześnie umożliwiając obsługę wielu <img>
elementów.
// Set the click handler on your div
$("body").off("click", "#mydiv").on("click", "#mydiv", function() {
// Find the image using.find() and .each()
$(this).find("img").each(function() {
var img = this; // "this" is, now, scoped to the image element
// Do something with the image
$(this).animate({
width: ($(this).width() > 100 ? 100 : $(this).width() + 100) + "px"
}, 500);
});
});
#mydiv {
text-align: center;
vertical-align: middle;
background-color: #000000;
cursor: pointer;
padding: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="mydiv">
<img src="" width="100" height="100"/>
</div>
$("body").off("click", "#mydiv").on("click", "#mydiv", function() {
event.stopImmediatePropagation()
na tym elemencie, aby temu zapobiec.
$(document).ready(function() {
// When you click the DIV, you take it with "this"
$('#my_div').click(function() {
console.info('Initializing the tests..');
console.log('Method #1: '+$(this).children('img'));
console.log('Method #2: '+$(this).find('img'));
// Here, i'm selecting the first ocorrence of <IMG>
console.log('Method #3: '+$(this).find('img:eq(0)'));
});
});
.the_div{
background-color: yellow;
width: 100%;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="my_div" class="the_div">
<img src="...">
</div>
Możesz użyć
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
$(this).find('img');
</script>
Jeśli twój obraz jest dokładnie pierwszym elementem w div, spróbuj
$(this.firstChild);