Javascript 从div中选择文本-不明显的方式
这是我的部门:Javascript 从div中选择文本-不明显的方式,javascript,jquery,dom,twitter-bootstrap,Javascript,Jquery,Dom,Twitter Bootstrap,这是我的部门: <div id="myDiv">The <span class="cordial-err-corr" id="good0-0" data-original-title="" title="">best</span> way to receive congrats <span> <span class="cordial-err-corr" id="good0-1" data-original-title="" titl
<div id="myDiv">The
<span class="cordial-err-corr" id="good0-0" data-original-title="" title="">best</span>
way to receive congrats
<span>
<span class="cordial-err-corr" id="good0-1" data-original-title="" title="">are</span>
<div class="btn-group">
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a class="prop0-1">is</a></li>
<li><a class="prop0-1">are</a></li>
</ul>
</div>
</span> to give a correct answer.</div>
我试着用jquery选择器玩$.filter或$.not或$.children等。我找不到正确的方法。需要帮助
您可以在JSFIDLE中找到一些代码:
[编辑]
一种解决方案建议使用以下代码:
$('#result').append( $('#myDiv').text().replace($(".btn-group").text(),"") ).append('<br />')
因此,如果我明白了,您希望从.text中排除该列表。尝试以下方法:
$('#result').append( $('#myDiv').text().replace($(".dropdown-menu").text(),"") ).append('<br />')
试一试
演示:如果您不介意将所有哑文本放在span中,那么只需抓取哑文本span和.cordial err corr span并查找即可
演示:我有一个难看的方法,虽然我想这个方法很简单: 我们可以创建一个副本,然后删除不想显示的dom元素。然后我们可以得到想要的文本
var clone_div = $('#myDiv').clone();
clone_div.find('.btn-group').remove();
$('#result').append(clone_div.text()).append('<br />');
这是JSFIDLE 正则表达式来提取div.text的字符吗?首先,您必须区分哪个li是正确的,然后才能继续筛选。如果您选择的是正确的li,那么您可以尝试使用jQuery的:selected selector:此选项有效:但您需要更改jQuery版本。既然我们知道版本需要更新,这里的其他人可能会告诉我们为什么1.7.2不起作用为什么使用列表而不是元素?我考虑过这个解决方案,虽然很难看,但很有效;非常感谢。我会检查其他的。谢谢,我想这是最干净的解决方案。请参阅我取消选中您的解决方案为已接受,因为我需要更多的帮助,请参阅我问题中的编辑。好的,周一不是思考的最佳日期…$。dropdown-menu.text在一个菜单中返回所有文本,因此replace从未找到此关联文本。所以我想添加一个循环。但是如果有其他文本与$.dropdownn menu.text返回的文本相同呢?@pktangyue是的,我在实现它的时候考虑过这个问题。但我们可以验证,如果第一个单词是A,建议是B,我们将有AAB或BAB。所以这是一个简单的启发式方法,但我实现了它。您的解决方案很好,但不能与JSFIDLE中显示的原始html代码一起工作:您的解决方案太复杂,太长。安德烈·内梅斯找到了一个单线解决方案。看见
$('#result').append( $('#myDiv').text().replace($(".dropdown-menu").text(),"") ).append('<br />')
function process(el){
var array = [];
$(el).contents().each(function(){
var $this = $(this), text;
if(this.nodeType == 3){
text = $.trim($this.text());
if(text){
array.push(text)
}
} else if($this.is(':not(.btn-group)')){
Array.prototype.push.apply(array, process(this))
}
})
return array;
}
console.log(process($('#myDiv')).join(' '))
<div class="well" id="myDiv"><span class="cordial-content">The </span>
<span class="cordial-err-corr" id="good0-0" data-original-title="" title="">best </span>
<span class="cordial-content">way to receive congrats </span>
<span>
<span class="cordial-err-corr" id="good0-1" data-original-title="" title="">are </span>
<div class="btn-group">
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a class="prop0-1">is</a></li>
<li><a class="prop0-1">are</a></li>
</ul>
</div>
</span> <span class="cordial-content">to give a correct answer. </span></div>
$('#myDiv').find('.cordial-err-corr,.cordial-content').text()
var clone_div = $('#myDiv').clone();
clone_div.find('.btn-group').remove();
$('#result').append(clone_div.text()).append('<br />');