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);
});
2
Grasper 14 sierpień 2014, 17:51

4 odpowiedzi

Najlepsza odpowiedź

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);
});
5
Top Questions 15 sierpień 2014, 06:16

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);
});
3
Tacos 14 sierpień 2014, 13:56

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 );

jsfiddle

3
filoxo 14 sierpień 2014, 15:37

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());

JSFiddle

Dokumentacja

2
George 14 sierpień 2014, 14:04