2012-03-05 4 views
1

мне нужно предупреждение thisparenttext в следующий код, нажав на clickedlicontentполучить текст родителя Ли по JQuery

<script> 
$("#one").live("click",function(){ 
var partxt=$(this).parent().parent().text(); 
alert(partxt); 
}); 
</script> 
<ul> 
    <li>thisparenttext<ul><li id="one">clickedlicontent</li></ul></li> 
    <li>bb</li> 
</ul> 

Другими словами, я хочу взять только текст первого родителя щелкнул ли, не все все его html-коды.

+2

возможно дубликат [Как получить текст ссылки, которая имеет детей?] (Http://stackoverflow.com/questions/9450453/how-to-get-the-text -of-a-link-which-have-children) и [потенциально другие] (http://stackoverflow.com/search?q=jquery+get+text+excluding+children&submit=search). –

+0

Я думаю, что это не дублируется, потому что несколько тегов li сделали его настолько сложным. – Huseyin

+0

Я думаю, что это так. Два ответа здесь предлагают то же решение, что и принятый ответ в другом вопросе.Ответ не зависит от какой-либо структуры: клонировать узел, удалять все дочерние узлы элемента и извлекать оставшийся текст. Как * получить * элемент, из которого вы хотите получить текст, - это другая проблема, которую вы уже, казалось, решили. –

ответ

3

Что вам нужно сделать, это клонировать элемент, удалите все его ребенок и использовать $.text(), чтобы получить оставшийся текст:

$("#one").live("click", function(){ 
    var partxt = $(this).parent().parent().clone().children().remove().end().text(); 
    alert(partxt); 
}); 

Это берет родитель родителя и клонов его. Это так, что когда мы делаем .children().remove(), это не влияет на отображаемые элементы. .end() будет «повторно выбирать» родительский элемент родителя $(this) и .text() получает текст.

2

Вы можете попробовать это.

$("#one").live("click",function(){ 
    //It will filter parent li's content to get only text node and get its text 
    var partxt = $(this).parent().parent().contents().filter(function(){ 
         //return true only if text node 
         return this.nodeType == 3; 
        }).text(); 
    alert(partxt); 
}); 

Работа демо - http://jsfiddle.net/TpdfA/

Side Примечание:

Если вы используете jQuyer версии 1.7+, то это adviceable использовать on иначе вы можете использовать делегат вместо live.

Использование delegate()

//Instead of document you can specify any parent container of dynamic elements 
$(document).delegate("#one", "click",function(){ 
    //It will filter parent li's content to get only text node and get its text 
    var partxt = $(this).parent().parent().contents().filter(function(){ 
         //return true only if text node 
         return this.nodeType == 3; 
        }).text(); 
    alert(partxt); 
}); 

Используя on() (JQuery версии 1.7+)

//Instead of document you can specify any parent container of dynamic elements 
$(document).on("click", "#one",function(){ 
    //It will filter parent li's content to get only text node and get its text 
    var partxt = $(this).parent().parent().contents().filter(function(){ 
         //return true only if text node 
         return this.nodeType == 3; 
        }).text(); 
    alert(partxt); 
}); 

Ссылки:

1

Это превратилось в интересную цепочку

Dem0: http://jsfiddle.net/fut7y/

$('#one').click(function() { 
    var topLevelText = $(this).parent().parent().clone().children().remove().end().text(); 

    alert(topLevelText); 
});​ 
1

Получить HTML, превратить его в строку, и разделенного на первый HTML начальный тег, а затем выберите первый значение массива для получения первой текстовой строки.

$(document).on("click", "#one", function(){ 
    var partxt = new String($(this).parent().parent().html()).split('<')[0]; 
    alert(partxt); 
});​ 

FIDDLE

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