2010-04-01 71 views
10

是否有可能使用jQuery来回显文本而不是脚本标记?更确切地说,有没有办法完成使用jQuery来回显文本

<script type="text/javascript"> 
    document.write("foo"); 
</script> 

...没有使用document.write?在阅读this之后,我不喜欢使用document.write

我知道,我也可以这样做:

<span id="container"></span> 
<script type="text/javascript"> 
    $("#container").text("foo"); 
</script> 

不过,我很感兴趣,看看是否有办法做到这一点不使用容器元素,最好使用jQuery。

在此先感谢!

回答

1

是的,没有。对于你想要的,没有。

  1. 你可以把它呼应文字的东西没有一个真正的容器,是的(参见:DocumentFragment)。

  2. 它会显示在您的文档中...不。这是因为它没有被告知应该放在哪里。 html中的脚本标记并不直接作为参数保留它们的位置,所以你可以找到最后一个标记并在其中放置一个TextNode,但是,这可能很困难,也很麻烦。

你可以做什么,而不是为没有修改DOM,直到一个事件,如“document.body.onLoad”一般的做法。这是一种常见的做法,通常是特别适用于ajax的方式。

如果这些都不适合你,请使用罕见的insertBefore(),jquery在脚本元素上使用id为.after和.before提供类似的支持。

<script id="flail"> 
var flail=document.getElementById("flail"); 
flail.parentNode.insertBefore(document.createTextNode("TEST"),flail) 
</script> 

注:这通常是一个不好的做法,因为它可以创建悬挂的重物,并鼓励html页面没有这个输出不连贯。然而,就像所有的事情一样,有些情况下会使用它。

5

如果你想出一个jQuery的做法document.write(),它会因为所有相同的原因而变差。

如果这是您所需要的,或者更好的方式是操纵现有元素或在DOM中的某处添加新元素,那么您最好使用document.write()--这正是jQuery擅长的。

+1

+1 jQuery是JavaScript的顶部的图书馆,它推迟到JS为许多常见任务(阵列和例如字符串管理)因为生JS一定会更快! – Andy 2010-04-01 17:23:31

-1

我建议你通过John Resig来实现微型模板引擎,jquery的创始人。

全插件

// Simple JavaScript Templating 
// John Resig - http://ejohn.org/ - MIT Licensed 
(function() { 
    var cache = {}; 

    this.tmpl = function tmpl(str, data) { 
     // Figure out if we're getting a template, or if we need to 
     // load the template - and be sure to cache the result. 
     var fn = !/\W/.test(str) ? 
       cache[str] = cache[str] || 
       tmpl(document.getElementById(str).innerHTML) : 
       // Generate a reusable function that will serve as a template 
       // generator (and which will be cached). 
       new Function("obj", 
       "var p=[],print=function(){p.push.apply(p,arguments);};" + 
       // Introduce the data as local variables using with(){} 
       "with(obj){p.push('" + 
       // Convert the template into pure JavaScript 
       str 
       .replace(/[\r\t\n]/g, " ") 
       .split("<%").join("\t") 
       .replace(/((^|%>)[^\t]*)'/g, "$1\r") 
       .replace(/\t=(.*?)%>/g, "',$1,'") 
       .split("\t").join("');") 
       .split("%>").join("p.push('") 
       .split("\r").join("\\'") 
       + "');}return p.join('');"); 

     // Provide some basic currying to the user 
     return data ? fn(data) : fn; 
    }; 
})(); 

使用

重要:换行只能用\

var tpl = '\ 
    <div id="myTemplate">\ 
     <%\ var selectorIndex = 0;\ %>\ 
      <ul>\ 
       <% if(selectorIndex == 0){ %>\ 
       <li>this is echo text for zero</li>\ 
       <% } else{ %>\ 
       <li>this is echo text for something else</li>\ 
       <% } %>\ 
      </ul>\ 
    </div>\ 
'; 

$(body).html(tmpl(tpl,{'extraData':'here'})); 

更多信息

http://krasimirtsonev.com/blog/article/Javascript-template-engine-in-just-20-line

计算器上的相关问题

Syntax Error with John Resig's Micro Templating after changing template tags <# {% {{ etc