2015-07-23 2 views
1

У меня есть некоторые HTML (обратите внимание на этот блок HTML повторяется с данными внутри изменения):Получить родительский Div, а затем элементы внутри

  <div class="memberDiv" style="position:relative"> 
       <p class="myUserName"><strong>Jo Bloggs</strong></p> 
       <p class="myJobTitle">Widget Maker</p> 
       <p class="myCountry">England</p> 
       <button class="memberMore">MORE INFORMATION</button> 
      </div> 

И то, что я пытаюсь сделать в Яве получить фактические значения внутри DIV (т.е. Джо Bloggs, Widget Maker, Англия)

Это то, что я думал, что будет работать:

$(".memberMore ").click(function (e) { 
    e.preventDefault(); 
    //Get the 'parent' div (memberDiv) 
    var myDiv = $(this).closest("div"); 
    alert($(myDiv).next(".myUserName").text()); 
    return false; 
}); 

Но окно предупреждения показывает на «неопределенное» ошибку.

Может ли кто-нибудь оставить мне 5 минут, чтобы показать мне ошибку моих путей, пожалуйста?

спасибо, Craig

+1

Попробуйте alert (myDiv.find (". MyUserName"). Text()); – Typoheads

+1

Это ** хорошо стоит ** ваше время, просматривая [jQuery API] (http://api.jquery.com), начинающееся до конца. Это занимает всего час или два, и это мгновенно возвращается.Также невероятно полезно научиться использовать отладчик, встроенный в ваш веб-браузер, чтобы вы могли точно видеть, что происходит. –

ответ

3

Использование find() вместо

$(".memberMore ").click(function(e) { 
 
    e.preventDefault(); 
 
    //Get the 'parent' div (memberDiv) 
 
    var myDiv = $(this).closest("div"); 
 
    console.log($(myDiv).find(".myUserName").text()); 
 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 
<div class="memberDiv" style="position:relative"> 
 
    <p class="myUserName"><strong>Jo Bloggs</strong> 
 
    </p> 
 
    <p class="myJobTitle">Widget Maker</p> 
 
    <p class="myCountry">England</p> 
 
    <button class="memberMore">MORE INFORMATION</button>

+0

Фантастическая работа, спасибо всем. Как только я смогу принять ответ, я это сделаю. (Вы все в порядке!) – SxChoc

+0

@SxChoc, рад, что это помогло :) – AmmarCSE

1
Try this 
$(".memberMore ").click(function (e) { 
    e.preventDefault();   
    alert($(this).find(".myUserName").text()); 
    return false; 
}); 
0

Вы должны вам функция "братьев и сестер", а не "найти", как это:

$(".memberMore ").click(function (e) { 
    e.preventDefault();   
    alert($(this).siblings(".myUserName").text()); 
    return false; 
}); 

Fiddle here

+0

Это не работает, когда я заменяю это myDiv (очевидно, я не эксперт в этом!) – SxChoc

+0

@SxChoc Странно! Я использовал html, который вы разместили. Вы уверены, что правильно изменили все ссылки на классы и идентификаторы? В скрипке похоже, что он работает ... – ANVerona

0

Чтобы вернуть все пункты в этом DIV, цикл через них:

$(".memberMore ").click(function(e) { 
 
    e.preventDefault(); 
 
    //Get the 'parent' div (memberDiv) 
 
    var myDiv = $(this).closest("div"); 
 
    var txtReturn = ''; 
 
    myDiv.find('p').each(function(index) { 
 
    if (index>0) { 
 
     txtReturn += ', ' 
 
    } 
 
    txtReturn += $(this).text() 
 
    }); 
 
    alert(txtReturn); 
 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="memberDiv" style="position:relative"> 
 
    <p class="myUserName"><strong>Jo Bloggs</strong></p> 
 
    <p class="myJobTitle">Widget Maker</p> 
 
    <p class="myCountry">England</p> 
 
    <button class="memberMore">MORE INFORMATION</button> 
 
</div>

Или вы можете сделать его немного легче, перемещая кнопку из DIV, и/или изменить его на input type="button" (поэтому он не имеет внутреннего текста).

$(".memberMore").click(function(e) { 
 
    e.preventDefault(); 
 
    //Get the 'parent' div (memberDiv) 
 
    var myDiv = $(this).prev("div"); 
 
    alert(myDiv.text()); 
 
    return false; 
 
}); 
 
$(".memberMore2").click(function(e) { 
 
    e.preventDefault(); 
 
    //Get the 'parent' div (memberDiv) 
 
    var myDiv = $(this).closest("div"); 
 
    alert(myDiv.text()); 
 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="memberDiv" style="position:relative"> 
 
    <p class="myUserName"><strong>Jo Bloggs</strong></p> 
 
    <p class="myJobTitle">Widget Maker</p> 
 
    <p class="myCountry">England</p> 
 
    <input type="button" class="memberMore2" value="MORE INFORMATION" /> 
 
</div> 
 
<button class="memberMore">MORE INFORMATION</button>

0

Вы также можете использовать функцию siblings(), чтобы получить текст всех элементов. Если вам нужно получить строку

Jo Bloggs, Widget Maker, England

Вы можете сделать:

$('.memberMore').on('click', function() { 
 
    
 
    var text = $(this).siblings().map(function() { 
 
    return $(this).text(); 
 
    }).get().join(', '); 
 
    
 
    alert(text); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="memberDiv" style="position:relative"> 
 
    <p class="myUserName"><strong>Jo Bloggs</strong></p> 
 
    <p class="myJobTitle">Widget Maker</p> 
 
    <p class="myCountry">England</p> 
 
    <button class="memberMore">MORE INFORMATION</button> 
 
</div>

0

Если вы хотите, чтобы показать текст всех p, вы можете попробовать что-то вроде:

$(".memberMore ").click(function(e) { 
    e.preventDefault(); 

    $(this).parent().find('p').each(function(index, elemt){ 
    console.log($(elemt).text()); 
    }); 

    return false; 
}); 

Ключом здесь является метод parent().

Смежные вопросы