示例代码
var jqxhr=$.getJSON("http://search.twitter.com/search.json?callback=?",{q:query},
function(data) {
... question.
});
问题
现在我需要为每个推文创建这样的结果(例如......)
<article class="tweet">
<header>
<img class ="tweet_img"src="data.profile_image_url"/>
</header>
<p class="tweet-text">data.text</p>
</article>
好吧,我知道有几种方法可以将每个结果附加到文档中:
现在的问题是:根据您的经验,做到这一点的正确方法是什么? 我指的是使用良好原则的正确方法。
请不要问html,这是一个愚蠢的例子 感谢。
答案 0 :(得分:1)
好吧,最佳实践会告诉你不要使用DOM元素的innerHTML属性,这就是你在选项1中所做的。但除非你担心使用Javascript立即操作代码,附加事件,或标签注入的安全问题(我不知道这是多少问题)然后创建一个HTML字符串并使用innerHTML插入它会更快更容易更新。
答案 1 :(得分:0)
如果要将一些事件处理程序附加到元素,则应单独生成它们。
但是如果你不想附加任何事件处理程序,那么我会推荐第一种方法
$("body").append('<article class="tweet"><header><img class ="tweet_img" src="'+data.profile_image_url+'"/></header><p class="tweet-text">'+data.text+'</p></article>')
答案 2 :(得分:0)
我知道最简洁的方法是使用Mustache之类的模板系统,而不是“JS in JS”
var template = html_string, //HTML from a string or from AJAX
data = {...data...}, //structured data
html = $(Mustache.render(template,data)); //wrap in jQuery to operate
html.appendTo(somewhere_in_DOM);
答案 3 :(得分:0)
我建议你使用像Handlebars.js这样的模板引擎。这是解决问题的正确方法。
其中有更多选项,其中有更多条件选项可用于功能。只需访问上面的链接,您就会有所了解。
答案 4 :(得分:0)
有几种有效的方法各有各自的优势......
在java代码中生成HTML作为字符串并将其添加为.innerHTML的技术被认为是执行速度最快的方法之一......但它几乎不能对HTML进行验证。
或者,您可以直接使用DOM方法构建HTML,创建标记并附加它们以构建结构。这通常更安全,因为你有更多的验证,但DOM方法非常冗长,这使得输入有点痛苦......而且代码更加冗长,因为你必须一次添加一个属性作为好。
我个人的偏好,特别是因为你已经在使用JQuery,将使用JQuery构建标签和文本节点,并使用JQuery将它们组合在一起,这允许你在一口大小,更人性化的情况下这样做单位,没有变得过于冗长。
这样做的另一个好处是,JQuery生成新标签的方法可以为不符合DOM标准的旧浏览器提供额外支持。希望您实际上不必关心您的页面是否适用于那些旧版浏览器,但更多兼容性也不会受到伤害。
在这种方法中,你会写下如下内容:
var article = $('<article class="tweet"></article>');
var header = $('<header></header>');
var image = $('<img class="tweet_img" src="' + data.profile_image_url + '"></img>');
var tweet = $('<p class="tweet-text">' + data.text + '</p>');
header.append(image);
article.append(header, tweet);
$("#id_of_content_area_to_add_the_tweet_to").append(article);