1

HTML 代码

<article class="evn-mn-pane">
    <h2><a href="somelink.php">leborium</a></h2>
    <div class="evn-date">20 June, 2013 |  Dr.some name some name1</div>
    <figure>
        <img src="images/events/speakers/no-image.jpg" alt="Dr. Somename"/>
            <figcaption>test link tested some dummy text this...
                <a href="somlink.php">more</a>
            </figcaption>
            <div class="clear"></div>
    </figure>
</article>

<article class="evn-mn-pane">
    <h2><a href="somelink.php">leborium</a></h2>
    <div class="evn-date">20 June, 2013 |  Dr.some name some name1</div>
    <figure>
        <img src="images/events/speakers/no-image.jpg" alt="Dr. Somename"/>
            <figcaption>test link tested some dummy text this...
                <a href="somlink.php">more</a>
            </figcaption>
            <div class="clear"></div>
    </figure>
</article>

jQuery代码

$('article').each(function(){
    alert($(this).find('figure > figcaption').html());
});

结果

测试链接测试了一些虚拟文本...

          <a href="somlink.php">more</a>

预期结果

测试链接测试了一些虚拟文本...

试过这个 SO 链接

尝试过的代码

$('article').each(function(){
    alert($(this).find('figure > figcaption').contents(':not(a)').html());
});

得到结果

不明确的

JSFIDDLE

如何达到预期的结果?任何帮助表示赞赏 仅供参考:我正在使用 jquery1.8.3

更新

我想获取除锚标签以外的所有其他标签,并期待使用克隆方法以外的结果。

4

4 回答 4

1

contents不接受任何论据。即使您在a.

$('article').each(function() {
    var t = $(this).find('figure > figcaption').contents().filter(function() {
        return this.nodeType === 3; //3 = TEXT_NODE
    });
    alert(t.text());

});

更新了 JSFiddle

figcaption如果您想要除 in 中的文本之外的每一段文本a,请使用以下命令:

return this.nodeType === 3 || this.tagName !== 'A';

关于nodeType财产

<a id='a'>asdf</a>

var a = document.getElementById('a');
a.nodeType === Node.ELEMENT_NODE; //true
a.firstChild.nodeType == Node.TEXT_NODE; //true asdf

更多关于节点类型

于 2013-07-16T05:52:56.767 回答
1

这是一个快速肮脏的方式来做到这一点。你做了一个克隆并删除所有的孩子。显然,您可以应用过滤来仅删除某些孩子。编码:

$('article').each(function(){
   var $cap =  $(this).find('figcaption')
   .clone()
   .children()
   .remove()
   .end();
   alert($cap.text());
});
于 2013-07-16T06:08:59.720 回答
0

像这样查找和删除a(更新为不从 HTML 中删除链接):

$('article').each(function(){
    var div = $("<div>" + $(this).find('figure > figcaption').html() + "</div>");
    div.find('a').remove();
    alert(div.html());
});

jsFiddle

于 2013-07-16T05:40:03.800 回答
0

文本是第一个 childNode:

$('article').each(function(){
    console.log($(this).find('figure > figcaption')[0].childNodes[0].data);
});

小提琴演示

于 2013-07-16T05:41:42.443 回答