【发布时间】:2014-12-03 04:24:22
【问题描述】:
如果我有
<div id="outside">
Hello
<div id="inside">
Qwertyuiop
</div>
</div>
如何在不包含内部任何内容或任何其他 HTML 标记的情况下获取外部的 InnerHTML? (基本上如何获得“Hello”)
【问题讨论】:
标签: javascript jquery innerhtml
如果我有
<div id="outside">
Hello
<div id="inside">
Qwertyuiop
</div>
</div>
如何在不包含内部任何内容或任何其他 HTML 标记的情况下获取外部的 InnerHTML? (基本上如何获得“Hello”)
【问题讨论】:
标签: javascript jquery innerhtml
这不是一个严肃的答案,并且基于Darin Morris' 高度破坏性的答案,但破坏性略小:
// Clone the element
var $clone = $("#outside").clone();
// Remove all the children (leaves text nodes)
$clone.children().remove();
alert($clone.text());
http://jsfiddle.net/TrueBlueAussie/ez4v83v5/4/
再次,我不会推荐这个作为替代说
$('#outside')[0].firstChild.nodeValue
但谁知道呢……这种技术在某些时候可能会派上用场 :)
【讨论】:
另一种选择:
$(function(){
var theHtml = $("#outside");
var texto = theHtml[0].childNodes[0].data;
alert((texto));
});
小提琴:
$(function() {
var theHtml = $("#outside");
var texto = theHtml[0].childNodes[0].data;
alert((texto));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="outside">
Hello
<div id="inside">
Qwertyuiop
</div>
</div>
<div id="test"></div>
【讨论】:
theHtml[0].firstChild.nodeValue 更短/更快。
尝试在这种情况下使用.contents()
alert($("#outside").contents().first()[0].nodeValue);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="outside">
Hello
<div id="inside">
Qwertyuiop
</div>
</div>
【讨论】:
first()[0] 是多余的。 $("#outside").contents()[0].nodeValue 做同样的事情:)
您正在尝试获取第一个孩子的价值,所以
alert($('#outside').prop('firstChild').nodeValue)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="outside">
Hello
<div id="inside">
Qwertyuiop
</div>
</div>
【讨论】:
prop 是否更好(而不仅仅是 $('#outside')[0].firstChild.nodeValue)?
.prop() 需要再次运行一些 jQuery 代码
prop 的开销呢? (如果没有孩子,要么会中断,所以 jQuery prop 并没有真正增加任何价值)。无论如何+1 :)
Array.prototype.filter.call(document.querySelector('#outside').childNodes, function (node) {
return node.nodeValue;
});
你也可以在 Vanilla 中试试这个,如果你在 div 后面有其他字符串,它也会处理一个案例。
【讨论】:
可能有更好的方法来做到这一点,但这应该适合你:
var kids = $("#outside").children();
for(var i = 0; i < kids.length; i++)
{
if(kids[i].nodeType != 3)
{
$(kids[i]).remove();
}
}
alert($("#outside").text());
查看这个 JSFiddle:http://jsfiddle.net/ez4v83v5/1
【讨论】:
for 循环和if 检查children 不返回nodeType 的元素 3. 你得到与$("#outside").children().remove(); 相同的效果jsfiddle.net/TrueBlueAussie/ez4v83v5/5 基本上它不仅是破坏DOM,但也效率低下。
试试jquery api children,试试fiddle
$(document).ready(function(){
alert($('#outside').clone() //clone the element
.children() //select all the children
.remove() //remove all the children
.end() //again go back to selected element
.text());
});
希望对你有帮助……
【讨论】:
Hello(这是一个文本节点,children() 不可见),而不是Qwertyuiop。对不起。