$ (this) 선택기의 자식을 얻는 방법은 무엇입니까?


2229

다음과 비슷한 레이아웃이 있습니다.

<div id="..."><img src="..."></div>

jQuery 선택기를 사용하여 클릭시 img내부의 자식을 선택하고 싶습니다 div.

를 얻으려면 div이 선택기가 있습니다.

$(this)

img선택기를 사용 하여 어린이 를 어떻게 구할 수 있습니까?

답변:


2854

jQuery 생성자는 context선택 컨텍스트를 재정의하는 데 사용할 수 있는 두 번째 매개 변수를 허용합니다 .

jQuery("img", this);

다음과 같이 사용하는 .find()것과 같습니다.

jQuery(this).find("img");

당신이 원하는 imgs 인 경우 에만 클릭 된 요소의 직계 후손, 당신은 또한 사용할 수 있습니다 .children():

jQuery(this).children("img");

575
jQuery ( "img", this)는 내부적으로 다음과 같이 변환됩니다 : jQuery (this) .find ( "img") 두 번째는 조금 더 빠릅니다. :)
Paul Irish

24
@Paul에게 감사합니다. find ()를 사용하는 것이 잘못되었다고 걱정 했습니다. 유일한 방법입니다.)
Agos

5
노드가 직접적인 자식이라면 $ (this) .children ( 'img'); ?
adamyonk

11
@adamyonk의 사실은 아닙니다. jsperf.com/jquery-children-vs-find/3
Simon Stender Boisen

3
@PaulIrish 가이 예제에서 언급 한 것과 정확히 반대되는 것을보고 있습니다 -jsperf.com/jquery-selectors-comparison-a . 누구나 빛을 비출 수 있습니까? 테스트 사례가 잘못되었거나 jquery가 지난 4 년 동안이 최적화를 변경했습니다.
Jonathan Vanasco

471

당신은 또한 사용할 수 있습니다

$(this).find('img');

이는의 img자손 인 모든을 반환합니다 .div


일반적으로 $(this).children('img')더 좋을 것 같습니다 . 예를 들어 <div><img src="..." /><div><img src="..." /></div></div>, 사용자는 아마도 1 단계 이미지를 찾고 싶어하기 때문입니다.
Buttle Butkus

137

img정확히 한 수준 아래로 첫 번째를 받아야하는 경우

$(this).children("img:first")

6
않습니다 :first만 "일치 아래로 정확히 한 수준 ", 또는 일치 않습니다 "최초의" 발견 된 것을? img
Ian Boyd

3
@IanBoyd .children()는 "정확히 한 수준 아래로" 시작된 :first곳이며 "첫 번째"가 시작된 곳 입니다.
Tyler Crompton

3
@IanBoyd, 그 요소는 설명되지 않습니다. 당신이 사용하는 경우에만 적용됩니다 .find()대신.children()
타일러 크롬 턴

2
만약 당신이 .find ()와 함께 : first를 사용한다면, jQuery는 모든 자손을 찾은 다음 때로는 매우 비싼 첫 번째 요소를 반환하는 것으로 보인다
Clarence Liu

1
@ButtleButkus는 질문에, this이미에 대한 참조했다 <div>을 포함 <img>당신은 당신 확실히 할 수 확실히 작성 개보다 후 한 기준에서 트래버스에 태그의 여러 수준이있다 그러나 경우, children()전화
rakslice

76

DIV 태그 바로 뒤에 IMG 태그가 오는 경우 다음을 사용할 수도 있습니다.

$(this).next();

16
.next ()는 요소가 다음 요소가된다는 것을 항상 보장 할 수 없다면 다른 방법을 사용하는 것이 좋습니다. 이 경우 IMG는 형제가 아닌 div의 후손입니다.
LocalPCGuy

OP는 명시 적으로 div 내부에 자식 img를 요청했습니다.
조르지오 템페 스타


41

아래와 같이 부모 div의 모든 img 요소를 찾을 수 있습니다

$(this).find('img') or $(this).children('img')

특정 img 요소를 원한다면 다음과 같이 쓸 수 있습니다

$(this).children('img:nth(n)')  
// where n is the child place in parent list start from 0 onwards

div에는 하나의 img 요소 만 포함되어 있습니다. 이 아래에 맞습니다

 $(this).find("img").attr("alt")
                  OR
  $(this).children("img").attr("alt")

그러나 div에 아래와 같은 img 요소가 더 있으면

<div class="mydiv">
    <img src="test.png" alt="3">
    <img src="test.png" alt="4">
</div>

그런 다음 상위 코드를 사용하여 두 번째 img 요소의 대체 값을 찾을 수 없습니다. 그래서 당신은 이것을 시도 할 수 있습니다 :

 $(this).find("img:last-child").attr("alt")
                   OR
 $(this).children("img:last-child").attr("alt")

이 예제는 부모 개체 내에서 실제 개체를 찾는 방법에 대한 일반적인 아이디어를 보여줍니다. 클래스를 사용하여 자식 개체를 구별 할 수 있습니다. 쉽고 재미 있습니다. 즉

<div class="mydiv">
    <img class='first' src="test.png" alt="3">
    <img class='second' src="test.png" alt="4">
</div>

아래와 같이 할 수 있습니다 :

 $(this).find(".first").attr("alt")

보다 구체적으로 :

 $(this).find("img.first").attr("alt")

위 코드와 같이 find 또는 children을 사용할 수 있습니다. 더 방문을 위해 아이들은 http://api.jquery.com/children/ 하고 찾기 http://api.jquery.com/find/을 . 예를 참조하십시오 http://jsfiddle.net/lalitjs/Nx8a6/


35

jQuery에서 자식을 참조하는 방법 다음 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

나는 nth-child ()
McGuinness를

31

DIV의 ID를 모르면 다음과 같이 IMG를 선택할 수 있다고 생각합니다.

$("#"+$(this).attr("id")+" img:first")

54
이것은 아마도 실제로 작동하지만 Rube Goldberg의 답변입니다 :)
Scott Evernden

8
이 코드를 사용하려면 최소한 $ ( "#"+ this.id + "img : first")
LocalPCGuy

10
@LocalPCGuy 당신은 의미했다 : "그리고 당신이 도움 을 얻기 위해 그 코드 호출 을 사용하려고한다면 "
gdoron은 Monica

'this'가 이미 실제 div를 선택한 경우 왜 이렇게 하시겠습니까? 또한 div에 ID가 없으면이 코드가 작동하지 않습니다.
Giorgio Tempesta

31

이 코드를 사용해보십시오 :

$(this).children()[0]

13
가 아닌 JQ 개체 DOM 요소를 반환하지만 그 작동합니다
redsquare

2
현재 상황에 대한 최선의 접근 방법인지 모르겠지만이 경로를 사용하여 jQuery 객체로 끝나려면 다음과 같이 포장하십시오 $($(this).children()[0]).
patridge 2012

19
또는 더 쉬운$(this:first-child)
레미

4
대신 $($(this).children()[x])사용 $(this).eq(x)하거나 그냥 첫 번째를 원하는 경우 $(this).first().
Cristi Mihai

16
@ rémy : 유효한 구문조차 아닙니다. (누군가가 알 수 있도록 2 년을 모두
보았습니다

23

다음 방법 중 하나를 사용할 수 있습니다.

1 찾기 () :

$(this).find('img');

어린이 2 명 () :

$(this).children('img');

21

jQuery each는 하나의 옵션입니다.

<div id="test">
    <img src="testing.png"/>
    <img src="testing1.png"/>
</div>

$('#test img').each(function(){
    console.log($(this).attr('src'));
});

15

Child Selecor 를 사용 하여 상위에서 사용 가능한 하위 요소를 참조 할 수 있습니다 .

$(' > img', this).attr("src");

아래는 참조가없고 다른 기능에서 사용할 수있는 $(this)참조하려는 경우 입니다.imgdiv

 $('#divid > img').attr("src");


8

기능 코드는 다음과 같습니다. 간단한 데모입니다.

DIV를 클릭하면 몇 가지 다른 방법으로 이미지를 얻습니다.이 상황에서 "this"는 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>

그것이 도움이되기를 바랍니다!


5

<img>내부에 0 개에서 여러 개의 태그 가있을 수 있습니다 <div>.

요소를 찾으려면 .find() .

코드를 안전하게 유지하려면을 사용하십시오 .each().

여러 요소 를 처리 할 수있게하면서 0 요소 의 경우 .find().each()참조를 함께 사용 하면 null 참조 오류가 방지 됩니다.<img><img>

// 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() {
Chris22

@Alex가 스 니펫을 사용하는 방법과 위치를 모르겠습니다. 그래서 최대한 안전하고 일반적으로 만들었습니다. 이벤트를 본문에 첨부하면 이벤트가 생성 될 때 div가 DOM에 없었더라도 이벤트가 트리거됩니다. 새 이벤트를 작성하기 전에 이벤트를 지우면 이벤트가 트리거 될 때 핸들러가 두 번 이상 실행되지 않습니다. 내 방식대로 할 필요는 없습니다. div에 이벤트를 연결하는 것만으로도 효과가 있습니다.
Jason Williams

감사. 나는 이것을 스크립트에서 전에 보았고 프로그래머가 의도 한대로 작동했지만 모달 창에 사용하려고 시도했을 때 이벤트는 여전히 한 번의 클릭으로 여러 모달을 만들었습니다. 나는 그것을 잘못 사용하고 있다고 생각하지만, event.stopImmediatePropagation()그 일이 일어나지 않도록 요소를 사용하여 상처를 입었습니다 .
Chris22

4

$(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>


0

당신은 사용할 수 있습니다

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
 $(this).find('img');
</script>

11 년 전의 필립스의 대답과 다른 점은 무엇입니까?
David

0

img가 div의 첫 번째 요소라면 시도해보십시오.

$(this.firstChild);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.