Próbuję utworzyć selektor, który będzie chwycić element li
i pokaż tekst. Problem polega na tym, że w li
tag mam znacznik span
i jest również wyświetlany.
Jak chwycić tekst najbliższego elementu bez niektórych elementów w środku?
Zobacz tutaj, nie chcę, aby słowo "edytować" do uwzględnienia. http://jsfiddle.net/ozyf87tb/
<li>This is the story of the Jungle book
<form action="" method="" class="form_edit">
<textarea class="inte" value="" name="inte"></textarea>
</form>
<span class="edit">Edit</span>
</li>
$(".edit").click( function(ev) {
var a = $(this).closest('li').text();
$('.inte').val(a);
});
4 odpowiedzi
http://jsfiddle.net/ozyf87tb/7/
Clone go (więc pracujesz z klonem, a nie w domu), zdobyć dzieci, usuń dzieci, zdobądź tekst.
$(".edit").click( function(ev) {
var a = $(this).closest('li').clone().children().remove().end().text();
$('.inte').val(a);
});
Najbardziej czytelny sposób na robienie tego, co chcesz zrobić, to otaczający tekst z pojemnikiem jak <span class='myText'></span>
. Możesz więc wybrać dokładny kontener za pomocą swojej klasy: Demo
<li><span class='myText'>This is the story of the Jungle book</span>
<form action="" method="" class="form_edit">
<textarea class="inte" value="" name="inte"></textarea>
</form>
<span class="edit">Edit</span>
</li>
$(".edit").click( function(ev) {
var a = $(this).prevAll('.myText').text();
$('.inte').val(a);
});
Najpierw zdobądź clone()
HTML.
var a = $(this).closest('li').clone();
Następnie usuń obcy rozpiętość.
a.find('span').remove();
Następnie włóż to do Textlai.
$('.inte').val( a.text() );
Można to również przepisać do jednego ciągu, ale zabiera odczytywności.
var a = $(this).closest('li').clone().find('span').remove().end().text();
$('.inte').val( a );
Użyj contents()
, a następnie filtruj swój wybór, aby zwrócić tylko węzły tekstowe. Wtedy wszystko, co musisz zrobić, to przyciąć dowolną przestrzeń:
var a = $.trim($(this).closest('li').contents().filter(function(){
return this.nodeType == 3;
}).text());
Dokumentacja