我正在尝试使用带有jQuery的javascript将制表符分隔的字符串转换为html表。
在输入字符串中,行由<br/>
分隔,列由tabs
分隔。
这是我到目前为止所拥有的:
$(function(){
$('div.jstable').each(function(){
var text = $(this).html();
var rows = text.split(/<br>/i);
var htmlString = "<table class='display dataTable'>"
var startTbody = true;
for(i = 0; i< rows.length; i++){
// build header section
if (i == 0){
htmlString += '<thead>';
}else {
if (startTbody){
htmlString += '<tbody>';
startTbody = false;
}
}
htmlString += '<tr>';
var row = rows[i];
var columns = row.split('\t');
// build columns
for (j = 0; j < columns.length; j++ ){
if (i == 0){
htmlString += '<th>' + columns[j] + '</th>';
}else {
htmlString += '<td>' + columns[j] + '</td>';
}
}
htmlString += '</tr>';
if (i == 0){
htmlString += '</thead>'
} else {
if (i == rows.length - 1){
htmlString += '</tbody>'
}
}
}
htmlString += '</table>';
$(this).html(htmlString);
})
});
这是输入文字:
<div class="jstable" style="float: left">
col1 col2 col3<br />asda fd dfs<br />mmmm ffff ssss
</div>
不幸的是,在IE8 / 7中,jquery .html()函数返回的文本将所有选项卡替换为空格。
IE9很好,也是当前版本的Firefox&amp; Chrome工作正常。
有什么想法吗?
答案 0 :(得分:2)
您可以将正则表达式传递给split()。 /\s+/
会将任意类型的连续空格视为单个分隔符:
>>> "one two".split(/\s+/)
["one", "two"]
>>> "one\ttwo".split(/\s+/)
["one", "two"]
>>> "one\ntwo".split(/\s+/)
["one", "two"]
答案 1 :(得分:1)
FWIW我发现如果用<pre>
标签包围输入文本,.html()函数将返回带有IE7 / 8中标签的文本,如预期的那样。
因此,最初的示例源html将如下所示:
<pre class="jstable" style="float: left">
col1 col2 col3<br />asda fd dfs<br />mmmm ffff ssss
</pre>