我正在尝试将javascript与jQuery一起使用,将制表符分隔的字符串转换为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和Chrome也可以正常工作。
有什么想法吗?
你可以将正则表达式传递给 split()。 /s+/
会将任何类型的连续空格视为单个分隔符:
>>> "one two".split(/s+/)
["one", "two"]
>>> "onettwo".split(/s+/)
["one", "two"]
>>> "onentwo".split(/s+/)
["one", "two"]
FWIW 我发现如果我用 <pre>
标签包围输入文本,.html() 函数将按预期返回带有 IE7/8 中带有制表符的文本。
因此,初始示例源 html 将如下所示:
<pre class="jstable" style="float: left">
col1 col2 col3<br />asda fd dfs<br />mmmm ffff ssss
</pre>