使用 jQuery 选择元素的一部分?

Selecting parts of an element with jQuery?

我有以下 HTML:

<div id="foo">
    <span>
        <a href="#" class="no-want">X</a>
        &nbsp;
        1
    </span>
    <span>
        <a href="#" class="no-want">X</a>
        &nbsp;
        2
    </span>
    <span>
        <a href="#" class="no-want">X</a>
        &nbsp;
        Hello
    </span>
</div> 

我想使用jQuery在JS中只得到以下12hello(这意味着没有<a>标签或&nbsp;).请注意 我不想影响 DOM 本身 。我只想检索对象(如数组)中的文本。

这是我目前拥有的:

$('#foo span');

但是我似乎无法删除 "a" 标签。

以下似乎也不起作用:

$('#foo span').remove('a');

我也知道 .remove() 会影响 DOM 它自身,而不仅仅是检索文本。

尝试使用 RegEx 来匹配您想要的内容

$('#foo span').each(function () {
  alert($(this).html().match(/[0-9]/));
});

JSFIDDLE

解决方案通过遍历每个子项并克隆它来进行操作来创建数组,因此 dom 保持完整

var values = $('#foo').children().map(function () {
    var $clone = $(this).clone();
    $clone.children().remove();
    return $.trim($clone.text());    
}).get();

console.log(values) /// ["1","2","Hello"]

DEMO

这段代码将为您获取该值:

$('#foo span').each(function(){
    console.log($.trim($(this).html().substring($(this).html().lastIndexOf("&nbsp;") + 6)));
});

工作 jsFiddle: http://jsfiddle.net/mrwqs2nb/1/

打开控制台,你会看到:

1
2
Hello

由于你的问题不详细,根据你的要求,可以按如下方式进行

   var res=[];
    $('#foo span').map(function(i){
    var htm=$(this).text();
    var htm_d=$(this).find('a').html();
    htm=$.trim(htm.split("").reverse().join(""));
    htm_d=$.trim(htm_d.split("").reverse().join(""));
    res[i] = htm.substring(0,htm_d.length); 
    } );
    alert(res);

直播http://jsfiddle.net/mailmerohit5/5bvavx0p/

不知道这个游戏的规则是什么,但是如果可以假设你想要的是在 &nbsp; 的右边,那么应该这样做:

$('#foo span').map(function() {
    //Split at the space.
    var parts = $(this).html().split('&nbsp;');
    //Remove the first element from the list.
    parts.shift();
    //Join and return.
    return parts.join('');
}).get();

尝试使用选择器 $("foo span")$.map()String.prototype.match()RegExp [0-9]+|[a-z]+[^\s+|\n+|" + el.querySelector(".no-want").textContent + "]", "ig" 来匹配数字或字符 a-z 不区分大小写,取反space 字符,或换行符,或 ".no-want" 元素 .textContent at index of parent span element

var res = $.map($("#foo span"), function(el, index) {
            return el.textContent.match(new RegExp("[0-9]+|[a-z]+[^\s+|\n+|" 
                   + el.querySelector(".no-want").textContent.trim() + "]", "ig"))
          });
console.log(res)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="foo">
  <span>
        <a href="#" class="no-want">X</a>
        &nbsp;
        1
    </span>
  <span>
        <a href="#" class="no-want">X</a>
        &nbsp;
        2
    </span>
  <span>
        <a href="#" class="no-want">X</a>
        &nbsp;
        Hello
    </span>
</div>

使用 jquery 的 contents - api 页面有一个关于如何在忽略其他元素的同时增加文本节点的示例。

var result = $("#foo span")
             .contents()
             .filter(function() {
                 // #text nodes
                 return this.nodeType === 3;
             }).map(function() {
                 // get the value and trim it (also removes &nbsp)
                 return $(this).text().trim();
             }).filter(function() {
                 // remove blanks
                 return this != "";
             }).toArray();

$("#result").text(result.join());

工作fiddle