$ (මෙය) තේරීම්කරුගේ දරුවන් ලබා ගන්නේ කෙසේද?


2233

මට මේ හා සමාන පිරිසැලසුමක් ඇත:

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

සහ ක්ලික් කිරීම imgතුළ දරුවා තෝරා ගැනීමට jQuery තේරීමක් භාවිතා කිරීමට කැමතියි div.

ලබා ගැනීම සඳහා div, මට මෙම තේරීම් කාරකය ඇත:

$(this)

imgතේරීම් කාරකයක් භාවිතා කරමින් දරුවා ලබා ගන්නේ කෙසේද ?

Answers:


2860

JQuery ඉදිකිරීම්කරු 2 වන පරාමිතිය පිළිගන්නා අතර contextඑය තේරීමේ සන්දර්භය අභිබවා යාමට භාවිතා කළ හැකිය.

jQuery("img", this);

මේ ආකාරයට භාවිතා කිරීමට .find()සමාන වන්නේ:

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

ඔබ කැමති imgs ක්ලික් කළ මූලද්‍රව්‍යයේ des ජු පැවත එන්නන් පමණක් නම් , ඔබට ද මෙය භාවිතා කළ හැකිය .children():

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

576
එය වටින දේ සඳහා: jQuery ("img", මෙය) අභ්‍යන්තරව පරිවර්තනය කරනු ලබන්නේ: jQuery (මෙය) .find ("img") එබැවින් දෙවැන්න තරමක් වේගවත් වේ. :)
පෝල් අයිරිෂ්

24
ස්තූතියි a පෝල්, සොයා ගැනීම () භාවිතා කිරීම වැරදියි , එය එකම ක්‍රමය බවට පත්වේ යැයි මම කනස්සල්ලට පත්ව සිටියෙමි ;)
ඇගෝස්

5
නෝඩය සෘජු දරුවෙකු නම්, එය කිරීම වේගවත් නොවේ ද? (මෙය). දරුවන් ('img'); ?
adamyonk

11
amadamyonk infact නැත, අවම වශයෙන් මෙය ඉදිරියට යා යුතු දෙයක් නොවේ නම්: jsperf.com/jquery-children-vs-find/3
සයිමන් ස්ටෙන්ඩර් බොයිසන්

3
මෙම උදාහරණයේ @PaulIrish ප්‍රකාශ කළ දෙයට හරියටම ප්‍රතිවිරුද්ධ දෙය මට පෙනේ - jsperf.com/jquery-selectors-comparison-a . කාටහරි ආලෝකය විහිදුවන්න පුළුවන්ද? එක්කෝ මට පරීක්ෂණ නඩුව වැරදියි, නැතහොත් jquery පසුගිය අවුරුදු 4 තුළ මෙම ප්‍රශස්තිකරණය වෙනස් කළේය.
ජොනතන් වනස්කෝ

471

ඔබට ද භාවිතා කළ හැකිය

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

එමඟින් imgපැවත එන සියල්ලන්ම ආපසු ලබා දෙනු ඇතdiv


පොදුවේ ගත් කල, එය $(this).children('img')වඩා හොඳ වනු ඇති බව පෙනේ . උදා: <div><img src="..." /><div><img src="..." /></div></div>පරිශීලකයාට පළමු මට්ටමේ imgs සොයා ගැනීමට අවශ්‍ය නිසා.
බට්ල් බට්කස්

137

ඔබට පළමු imgමට්ටම හරියටම ලබා ගැනීමට අවශ්‍ය නම් , ඔබට එය කළ හැකිය

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

6
නැත :firstපමණක් "ගැලපෙන එක් මට්ටමකට හරියටම පහළ ", හෝ එය ගැලපෙන නැහැ මේ "පළමු" img සොයා ගත් බව?
ඉයන් බොයිඩ්

3
AnIanBoyd .children()යනු “හරියටම එක් මට්ටමකින් පහළට :first” පැමිණ “පළමු” පැමිණියේ කොතැනින්ද යන්නයි.
ටයිලර් ක්‍රොම්ප්ටන්

3
AnIanBoyd, එම මූලද්‍රව්‍යය ගණනය නොකෙරේ. එය අදාළ වන්නේ ඔබ .find()ඒ වෙනුවට භාවිතා කරන්නේ නම් පමණි.children()
ටයිලර් ක්‍රොම්ප්ටන්

2
ඔබ භාවිතා කරන්නේ නම්: පළමුව .find () සමඟ ප්‍රවේශම් වන්න, jQuery සියලු පරම්පරාවන් සොයාගෙන පසුව පළමු මූලද්‍රව්‍යය ආපසු ලබා දෙන බව පෙනේ, සමහර විට ඉතා මිල අධිකය
ක්ලැරන්ස් ලියු

1
Ut බට්ල්බුට්කස්, මේ වන thisවිටත් <div>අඩංගු වන සඳහනක් විය <img>, කෙසේ වෙතත් ඔබ සතුව ඇති යොමුකිරීමෙන් ගමන් කිරීමට ඔබට විවිධ මට්ටමේ ටැග් තිබේ නම් ඔබට අනිවාර්යයෙන්ම එකකට වඩා children()ඇමතුම් රචනා කළ හැකිය
රැක්ස්ලයිස්

76

ඔබගේ DIV ටැගය වහාම IMG ටැගය අනුගමනය කරන්නේ නම්, ඔබට මෙයද භාවිතා කළ හැකිය:

$(this).next();

16
.next () සැබවින්ම බිඳෙන සුළුය, මූලද්‍රව්‍යය ඊළඟ මූලද්‍රව්‍යය බවට ඔබට සැමවිටම සහතික කළ නොහැකි නම්, වෙනත් ක්‍රමයක් භාවිතා කිරීම වඩා හොඳය. මෙම අවස්ථාවේ දී, IMG යනු කොට් .ාශයේ පැවත එන්නෙකු මිස සහෝදරයෙකු නොවේ.
LocalPCGuy

OP පැහැදිලිවම ඩිවිෂන් එක ඇතුළේ දරුවෙක් ඉල්ලුවා.
ජෝජියෝ ටෙම්පෙස්ටා


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 මූලද්‍රව්‍යයේ alt අගය සොයා ගැනීමට ඔබට ඉහළ කේතය භාවිතා කළ නොහැක. එබැවින් ඔබට මෙය උත්සාහ කළ හැකිය:

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

ඉහත කේතය ලෙස ඔබට සොයාගැනීම් හෝ ළමයින් භාවිතා කළ හැකිය. වැඩි සංචාරය ළමුන් සඳහා 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

මම n-child ()
A McGuinness

31

ඩීඅයිවී හි හැඳුනුම්පත නොදැන මම ඔබට මේ ආකාරයට IMG තෝරා ගත හැකිය:

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

54
මෙය ඇත්ත වශයෙන්ම ක්‍රියාත්මක වන නමුත් එය රූබ් ගෝල්ඩ්බර්ග්ගේ පිළිතුරයි :)
ස්කොට් එවර්ඩන්

8
ඔබ එම කේතය භාවිතා කිරීමට යන්නේ නම්, අවම වශයෙන් කරන්න: $ ("#" + this.id + "img: first")
LocalPCGuy

10
OcLocalPCGuy ඔබ අදහස් කළේ: "ඔබ උදව් සඳහා එම කේත ඇමතුම භාවිතා කිරීමට යන්නේ නම් "
gdoron මොනිකා

'මෙය' දැනටමත් සත්‍ය බෙදීම තෝරාගෙන තිබේ නම් ඔබ මෙය කරන්නේ ඇයි? හැර, div ට හැඳුනුම්පතක් නොමැති නම් මෙම කේතය ක්‍රියා නොකරනු ඇත.
ජෝජියෝ ටෙම්පෙස්ටා

31

මෙම කේතය උත්සාහ කරන්න:

$(this).children()[0]

13
එය jq වස්තුවක් නොව ඩොම් මූලද්‍රව්‍යයක් ආපසු ලබා දුන්නද එය ක්‍රියාත්මක වනු ඇත
රතු

2
එය වර්තමාන තත්වයට හොඳම ප්‍රවේශය දැයි මම නොදනිමි, නමුත් ඔබට මෙම මාර්ගයට ගොස් තවමත් jQuery වස්තුවකින් අවසන් වීමට අවශ්‍ය නම්, එය ඒ ආකාරයෙන් ඔතා තබන්න : $($(this).children()[0]).
පැට්රිජ්

19
හෝ ඊටත් වඩා පහසුයි$(this:first-child)
රූමි

4
$($(this).children()[x])භාවිතය වෙනුවට $(this).eq(x)හෝ ඔබට පළමු එක අවශ්‍ය නම් $(this).first().
ක්‍රිස්ටි මිහයි

16
@ rémy: එය වලංගු වාක්‍ය ඛණ්ඩයක්වත් නොවේ. (දැනුම් ඕනෑම කෙනෙකුට සඳහා වසර 2 සියලු ගත්තනේ ...)
BoltClock

23

ඔබට පහත සඳහන් ක්‍රම වලින් එකක් භාවිතා කළ හැකිය:

1 සොයා ():

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

දරුවන් දෙදෙනෙකු ():

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


15

දෙමව්පියන් තුළ ඇති ළමා අංග සඳහන් කිරීමට ඔබට ළමා සෙලෙකෝර් භාවිතා කළ හැකිය .

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

පහත දැක්වෙන්නේ ඔබට සඳහනක් නොමැති නම් $(this)සහ වෙනත් ශ්‍රිතයකින් imgලබා ගත හැකි නම් div.

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


8

මෙන්න ක්‍රියාකාරී කේතයක්, ඔබට එය ක්‍රියාත්මක කළ හැකිය (එය සරල නිරූපණයකි).

ඔබ DIV ක්ලික් කළ විට ඔබට විවිධ ක්‍රම වලින් රූපය ලැබෙනු ඇත, මෙම තත්වය තුළ "මෙය" යනු 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>.

මූලද්රව්යයක් සොයා ගැනීමට, a භාවිතා කරන්න .find().

ඔබේ කේතය ආරක්ෂිතව තබා ගැනීමට, a භාවිතා කරන්න .each().

මූලද්රව්ය 0 ක් සම්බන්ධයෙන් ශුන්ය යොමු දෝෂයන් භාවිතා කිරීම .find()සහ .each()එකට භාවිතා කිරීම වළක්වන <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() {
ක්‍රිස් 22

ඇලෙක්ස් ඔහුගේ ස්නිපටය භාවිතා කරන්නේ කෙසේද හෝ කොහේදැයි මම නොදනිමි. ඒ නිසා, මම එය හැකි තරම් ආරක්ෂිත හා සාමාන්ය බවට පත් කළා. සිදුවීමක් ශරීරයට ඇමිණීමෙන් එය සිදුවනු ඇත, එම නිසා සිදුවීම නිර්මාණය කරන අවස්ථාවේ දී ඩිවිව් ඩොම් හි නොසිටියද සිදුවීම අවුලුවනු ඇත. නව එකක් නිර්මාණය කිරීමට පෙර සිදුවීම ඉවත් කිරීමෙන් සිදුවීමක් අවුලුවන විට හසුරුවන්නාට වඩා කිහිප වතාවක් ධාවනය වීම වළක්වයි. එය මගේ ආකාරයට කිරීම අවශ්‍ය නොවේ. සරලවම සිදුවීම කොට් to ාශයට අනුයුක්ත කිරීමද සාර්ථක වනු ඇත.
ජේසන් විලියම්ස්

ස්තූතියි. මම මෙය මීට පෙර ස්ක්‍රිප්ට් එකකින් දැක ඇති අතර එය ක්‍රමලේඛකයා අදහස් කළ දෙය සඳහා වැඩ කරන අතරේ, මම එය මෝඩල් කවුළුවක් සඳහා භාවිතා කිරීමට උත්සාහ කළ විට, සිදුවීම තවමත් තනි ක්ලික් කිරීමකින් මොඩල් කිහිපයක් නිර්මාණය කළේය. මම හිතන්නේ මම එය වැරදි ලෙස භාවිතා කළ නමුත් එය event.stopImmediatePropagation()සිදුවීම වලක්වා ගැනීම සඳහා මූලද්‍රව්‍යය භාවිතා කරමින් මම තුවාල කළෙමි .
ක්‍රිස් 22

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 කට පෙර ෆිල්නාෂ් දුන් පිළිතුරට වඩා මෙය වෙනස් වන්නේ කෙසේද?
ඩේවිඩ්

0

ඔබේ img හරියටම div තුළ පළමු අංගය නම් උත්සාහ කරන්න

$(this.firstChild);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.