使用jQuery </script>获取DOM <script>标记的文本

时间:2014-12-05 11:21:50

标签: jquery dom

所以我有这个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...">内部窗口小部件内容,它最终会被正确转换为文本。

编辑:我忘了说我尝试了html(),text(),val(),innerText,innerHTML等所有其他内容。我总是得到空字符串或未定义。

提前致谢

3 个答案:

答案 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);