所以我有这个html代码块:
<div id="widget-injection">
<script id="metamorph-15-start" type="text/x-placeholder"></script>
<div id="ember977" class="ember-view widget-content">
...
</div>
<script id="metamorph-15-end" type="text/x-placeholder"></script><script id="metamorph-10-end" type="text/x-placeholder"></script>
...(more widgets with the same structure as above)
</div>
在我的div&#34; widget-injection&#34;我有多个小部件。我用这个迭代每一个得到他们的html:
this.$(".widget-content").each(function(i){
console.log($(this).prev()[0]);//It prints the correct string that I want "<script id="meta..."
widgetsHtml.push($(this).prev()[0]+$(this).html()+$(this).next()[0]);
});
它在widget内容中工作得很好,但是,如果你注意到我得到每个prev()和next()元素,它们是围绕每个小部件的ember.js符号脚本。这是不起作用的部分。我想将那些prev()和next()字符串附加到由$(this).html()(每个widget-content HTML)产生的字符串中。虽然,我总是得到&#34; [对象HTMLScriptElement]&#34;当我想要的只是对应的字符串时,而不是来自我的prev()和next()元素的"<script id="meta..."
。所以我的问题是,如何将一个DOM脚本元素转换为纯文本/字符串?
PS:如果我有一个<script id="meta...">
内部窗口小部件内容,它最终会被正确转换为文本。
提前致谢
答案 0 :(得分:1)
与你用$(this)完成它的方式相同。使用.html()
.prev [0]为您提供DOM元素。
所以在你的情况下:
$(this).prev().html()+$(this).html()+$(this).next().html()
如果您不想要内容,但实际的标签,您必须使用outerHTML:
$(this).prev()[0].outerHTML + $(this)[0].outerHTML + $(this).next()[0].outerHTML
答案 1 :(得分:0)
$(".widget-content").each(function(i){
console.log($(this).prev());//It prints the correct string that I want "<script id="meta..."
// get div html
var getthishtml = $(this).html();
// empty this div html
$(this).html();
// move prev script inside div
$($(this).prev()).prependTo(widgetsHtml);
// append div html
$(this).append(getthishtml );
// move next script inside div
$($(this).next()).prependTo(widgetsHtml);
});
DEMO您可以检查检查元素以获得结果
答案 2 :(得分:0)
如果您只想要脚本标记的纯文本: http://jsfiddle.net/ef93x2aq/
var script = documenet.getElementById('metamorph-15-start');
var text = script.innerText;
document.write(text);