Как получить текст родительского элемента с помощью jquery? - PullRequest
7 голосов
/ 26 мая 2011

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

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

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

Ответы [ 6 ]

12 голосов
/ 26 мая 2011

Проблема с выполнением:

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

заключается в том, что он получит ВСЕ текст внутри div (sometext AND 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();
});

EDIT

Как @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();
1 голос
/ 26 мая 2011
        var content;
        $(this).parent().contents().filter(function() {
            return this.nodeType == 3;
        }).each(
                function(i,el){
                    content = content + $(el).text();
                }
        );

Устанавливает для содержимого значение любых прямых потомков, являющихся текстом.

0 голосов
/ 26 мая 2011
mySiblingtext="";
myParentId = "";
    $('a').click(function(){
        var mypart = $(this)[0].previousSibling;
        mySiblingtext= $(mypart).text();
        myParentId = $(this).parent().attr('id');
        alert(mySiblingText+myParentId);
    });

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

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

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

ПРИМЕЧАНИЕ:Одно из преимуществ этого метода в том, что если у вас есть разметка, например:

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

, текст «вещи после» не выделен.

0 голосов
/ 26 мая 2011

Хотя добавление в тег 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);
});
0 голосов
/ 26 мая 2011
$('a').click(function() {
    var id = $(this).parent('div').attr('id');
    var html = $(this).parent('div').html().replace(/<.*>/g, "");
    alert(html);
});
0 голосов
/ 26 мая 2011

jQueryElement.parent () текст ();.

...