只是想知道用javascript输出html标签是不好的做法。例如,假设我有一个表,并在页面加载ajax请求获取数据填充它。对于每行数据,我将需要输出另一行,如下所示:
$('#results').html('<tr><td>'+data.people[i]['name']+'</td><td>'+data.people[i]['age']+'</td><td>'+data.people[i]['gender']+'</td></tr>');
这样做不好吗?
答案 0 :(得分:5)
这不是正常做法。这就是你通常动态地动态添加html的方法。
答案 1 :(得分:3)
它还不错。你可以做两件事来改善它:
我想你在每个循环中都有这个,所以你可以在用HTML设置之前构建你的完整表。所以你只需执行一次.html()操作。
var yourTableHTML = ""
$.each(yourContentArray, function(data,i){
youtTableHTML += '<tr><td>'+data.people[i]['name']+'</td><td>'+data.people[i]['age']+'</td><td>'+data.people[i]['gender']+'</td></tr>'
})
$('#results').html(yourTableHTML);
第二件事是,你可以在你克隆的HTML文件(模型行)中使用HTML模型。因此,如果其他人必须更改HTML一次,他就不需要将javascript更改为。
答案 2 :(得分:2)
只有当这个JS在外部文件时才可以。
否则,IE可能会让你发疯,而且你的HTML不会在XHTML和严格的情况下验证。
答案 3 :(得分:2)
不是说什么是最佳实践,而是告诉你直接插入HTML的优点和缺点:
<强>赞成强>:
基本。因为它只是一个字符串,你可以像这样执行巧妙的技巧:
var lis = ['One', 'Two', 'Three'];
var html = '<li>' + lis.join('</li><li>') + '</li>';
直接使用字符串时,许多其他操作同样灵活。
<强>缺点强>:
.append()
和.addClass()
以及.attr()
使其变得更加困难。为了便于比较,您的示例不使用.html()
:
var tr = $('<tr>');
$('<td>').text(data.people[i]['name']).appendTo(tr);
$('<td>').text(data.people[i]['age']).appendTo(tr);
tr.appendTo('#results');
答案 4 :(得分:1)
这是最近使用网站作为Web服务器工作并提供数据然后使用客户端脚本来创建UI的趋势。
这绝对不错,它将限制传递的数据量,并提供更好的服务器/客户端,业务/ UI分离。
警告是依赖客户端会对浏览器施加压力。如果客户端是智能手机,那么可能会遇到过多的JavaScript。
答案 5 :(得分:1)
这是正常的,正如sushil bharwani所暗示的那样。但是:
答案 6 :(得分:1)
我认为最完整的答案是:只要没有不同的方法来完成你想要执行的任务,就可以在jQuery,javascript等中添加html标签。为了澄清 - 用jQuery构建一个完整的静态页面是不行的,你可以用html正常构建它,可以用jQuery向网页添加动态内容,这是它的主要原因之一。
答案 7 :(得分:1)
嗯,不。只要你保持小剂量,这是相当可接受的做法。做太多会在网页上添加明显的延迟。我会保持它更具结构性,尽管这只是个人偏好:
var tr = $('<tr></tr>');
var td = $('<td></td>');
td.text(data.people[i]['name']);
tr.append(td);
td = $('<td></td>');
td.text(data.people[i]['age']);
tr.append(td);
$('#results').html(tr);
这样做可以确保它更容易阅读(至少在我看来),因此以后更容易修复/添加。
答案 8 :(得分:0)
我不推荐它,因为你正在跳过内置功能以逃避输入。我不确定它是否是一个安全漏洞,但将随机内容注入到期望某种格式的字符串中绝不是一种好习惯。请改用jQuery.text()
方法。