如何使用Jquery选择内联文本?

时间:2015-02-27 23:32:40

标签: javascript jquery jquery-selectors

如何选择下面无序列表前面的文字?

<li class="foo">
   How can I remove this text?
   <ul class="bar">
       <li><a href="#">Link</a></li>
   </ul>
</li>

我尝试过这样的事情:

$('ul.bar').previousSibling().remove();

但我认为这只适用于另一个元素,而且我不完全确定如何选择不包含在标签内的文本。

3 个答案:

答案 0 :(得分:5)

您正在寻找的解决方案。

$('.foo').contents().filter(function(){
    return (this.nodeType == 3);
}).remove();

Demo here

  

nodeType属性返回节点类型(数字)   指定的节点。   如果节点是文本节点,则nodeType属性将返回3.


非jQuery版本:

获取父节点。获取Parent的所有Children节点。将节点集合转换为数组。循环遍历数组。在每次迭代时检查nodeType。如果是nodeType === 3那么它就是一个文本节点。然后删除它。

Array.prototype.slice.call(document.getElementById('parent_node_id_here').childNodes, 0).forEach(function (value) {
    if (value.nodeType === 3) {
        value.remove();
    }
});

答案 1 :(得分:2)

$(".foo").contents().get(0).remove()

或没有jquery

document.getElementsByClassName("foo")[0].childNodes[0].remove()

答案 2 :(得分:0)

尝试

$(".foo").replaceWith($.parseHTML($(".foo").html()).slice(1));

$(".foo").replaceWith($.parseHTML($(".foo").html()).slice(1));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<li class="foo">
   How can I remove this text?
   <ul class="bar">
       <li><a href="#">Link</a></li>
   </ul>
</li>