Как получить текст родительского элемента с помощью jQuery?

У меня есть div, который содержит гиперссылку delete, onlick из нее, я хочу текст тега div. Как это возможно в jQuery?!

<div>sometext<a href="#">delete</a></div>

Я хочу получить текст тега div "sometext"и, если возможно, идентификатор этого div. Есть идеи?!

6 ответов


проблема с:

$(this).parent().text();

заключается в том, что он получит весь текст в div (sometext и delete).

Я предполагаю, что вам нужен только текст в div, а не ссылка.

Я придумал пример на jsFiddle:

http://jsfiddle.net/HK794/

В идеале вы можете обернуть текст в промежуток, например:

<div id="div1"><span>sometext</span><a href="#">delete</a></div>

тогда ваш JavaScript будет быть:

$("a").click(function(e){

    $div = $(this).parent("div");

    id = $div.attr("id");

    text = $div.find("span").text();

    alert( text  );

    e.preventDefault();
});

редактировать

как утверждает @DarthJDG, если вы не хотите изменять свою разметку, любые из них также будут работать:

text = $div.get(0).childNodes[0].nodeValue;

//OR    
text = $div[0].childNodes[0].nodeValue;

//OR
text = $div.get(0).firstChild.nodeValue;

//OR
text = $div[0].firstChild.nodeValue;

//OR

//Gets the first text node
$div.contents().filter(function() {
    return this.nodeType == Node.TEXT_NODE;
}).text();

        var content;
        $(this).parent().contents().filter(function() {
            return this.nodeType == 3;
        }).each(
                function(i,el){
                    content = content + $(el).text();
                }
        );

устанавливает содержание стоимости прямых детей, которые текст.


$('a').click(function() {
    var id = $(this).parent('div').attr('id');
    var html = $(this).parent('div').html().replace(/<.*>/g, "");
    alert(html);
});

хотя добавление тега span, вероятно, будет более эффективным

http://jsfiddle.net/tN8Mv/

$("a").click(function(){
var text = $(this).parent().clone()    //clone the element
        .children() //select all the children
        .remove()   //remove all the children
        .end()  //again go back to selected element
        .text();
    alert(text);
});

mySiblingtext="";
myParentId = "";
    $('a').click(function(){
        var mypart = $(this)[0].previousSibling;
        mySiblingtext= $(mypart).text();
        myParentId = $(this).parent().attr('id');
        alert(mySiblingText+myParentId);
    });

jQuery пропускает текстовые узлы для всех своих методов обхода (кроме .оглавление.) )( Для доступа к предыдущему брату, а затем текст в этом случае, независимо от nodeType, вы можете получить доступ к узлу DOM, а затем использовать .previousSibling property. Затем вы можете получить доступ к тексту этого элемента.

доступ к идентификатору, если родитель также прост.

пример скрипки страница:http://jsfiddle.net/MarkSchultheiss/FuQ6g/

Примечание: один преимущество этого метода заключается в том, что у вас есть разметка:

<div id='aparent'>sometext<a href="#">delete</a>stuff after</div> 

текст" материал после " не выбран.


jQueryElement.родитель.)(text();