通过jquery获取父li文本

时间:2012-03-05 01:19:55

标签: jquery

点击 clickedlicontent

,我需要在以下代码中提醒 thisparenttext
<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>

换句话说,我只想要点击li的第一个父母的文本,而不是所有的html代码。

4 个答案:

答案 0 :(得分:3)

您需要做的是克隆元素,删除所有子元素并使用$.text()获取剩余文本:

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

这将获取父级的父级并克隆它。这样,当我们.children().remove()时,它不会影响显示的元素。 .end()将“重新选择”$(this)的父级的父级,.text()获取文字。

答案 1 :(得分: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/

旁注:

如果您使用的是jQuyer ver 1.7+,那么建议使用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 ver 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);
});

参考文献:

答案 2 :(得分:1)

这变成了一个有趣的链

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

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

    alert(topLevelText);
});​

答案 3 :(得分:1)

获取HTML,将其转换为字符串,然后拆分第一个HTML开始标记,然后选择数组的第一个值以获取第一个文本字符串。

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

FIDDLE