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
更新
我想获得除锚定标记之外的所有其他标记,并期望使用克隆方法获得除锚标记之外的结果。
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
中除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
有关节点类型的更多信息
这是一种快速而肮脏的方法。您制作一个克隆并删除所有子项。显然,您只能应用筛选来删除某些子项。代码:
$('article').each(function(){
var $cap = $(this).find('figcaption')
.clone()
.children()
.remove()
.end();
alert($cap.text());
});
文本是第一个子节点:
$('article').each(function(){
console.log($(this).find('figure > figcaption')[0].childNodes[0].data);
});
FIDDLE演示
像这样查找并删除a
(更新为不从HTML中删除链接):
$('article').each(function(){
var div = $("<div>" + $(this).find('figure > figcaption').html() + "</div>");
div.find('a').remove();
alert(div.html());
});
jsFiddle