JQuery:在封闭标签之间选择文本

时间:2011-08-23 21:45:43

标签: jquery css-selectors

已经提出了类似的问题,但不够相似!

鉴于这种结构:

<p class="text"> <b>1</b>this is point one<b>2</b>this is point two<b>3</b> </p>

如何选择已关闭标签之间的文字?即“这是第一点”。

内容通过JSON调用反馈,所以我对他们给我的结构做不了多少。

谢谢!

5 个答案:

答案 0 :(得分:3)

可以将您的<b>#</b>替换为更容易拆分的内容,然后迭代结果

example jsfiddle

jQuery的:

var points = $('.text').html().replace(/<b>.<\/b>/g, ',').split(','),
    $results = $('#results');
for (var i in points) {
    if ($.trim(points[i]).length > 0) {
        $results.html($results.html() + points[i] + "<br />");
    }
}

答案 1 :(得分:3)

如果您需要访问多个文本节点,可以使用以下方法将其全部提取到数组中:

var data = $(".text").contents().filter(function() {
    return this.nodeType == Node.TEXT_NODE && !this.nodeValue.match(/^\s*$/);
}).toArray();

您现在可以使用data[0].nodeValue访问“这是第一点”,使用data[1].nodeValue访问“这是第二点”。

工作小提琴:http://jsfiddle.net/jHhFS/

注意:附加条件(!this.nodeValue.match(/^\s*$/))过滤掉仅包含空格的文本节点。

答案 2 :(得分:1)

你可以使用.contents()获得该值。在你的情况下,这将工作:

alert($(".text").contents().eq(2).text())

答案 3 :(得分:0)

你可以试试 -

console.log($('p').contents().filter(function() {
    return this.nodeType == Node.TEXT_NODE;
}));

取自 - How do I select text nodes with jQuery?。如链接问题中所述,该解决方案不适用于IE7,但链接问题中有详细解决方法。

工作演示 - http://jsfiddle.net/E53HU/1/

答案 4 :(得分:0)

这是一个潜在的解决方案:

var nodes = $('p.text')[0].childNodes;
var results = [];

for (var i = 0; i < nodes.length; i++) {
    if (nodes[i].nodeType == Node.TEXT_NODE) {
        // support older browsers that do not have textContent
        var text = nodes[i].textContent || nodes[i].innerText;
        if ($.trim(text).length > 0) {   // optional - push non-empty strings
            results.push(text);
        }
    }
}
//console.log(results);

演示:http://jsfiddle.net/mrchief/3L8Ze/1/