0

我有一个遵循这种模式的 HTML 文档:

text1
text2
number
<br>

所以基本上:

<div id = "stuff">
Jacksonville Que
<br>
Jack Johnson Qc
<br>
160,786,000
<br>
Janesonville pour l'elaboration de
<br>
Janesonville for policy of
<br>
150,585,685
<br>
......
</div>

我本质上想将这些信息转换成一个表格,所以它看起来像:

-----------------------------------------
|Text1 Text2 Text3 | Number             |
-----------------------------------------

我知道我可以做类似的事情:

$("#stuff").map(function(){ return $(this).text() }).get().join(', ')

但这消除了所有<br>s- 我无法想出将模式考虑在内的代码。这变得更有问题,因为在数字或 3 之前可以有 1 行文本 - 那是没有设置的,唯一真正确定的模式是,当出现数字时,行结束,新行开始。

4

4 回答 4

1

一些迭代和一些检查应该可以解决这个问题:

var table = $('<table />');
var tr    = $('<tr />');

$("#stuff").contents().each(function(i, node) {
    if (node.nodeType === 3 && 'nodeValue' in node && node.nodeValue.trim().length) {
        node = node.nodeValue.trim();
        var isNumb = !isNaN(parseInt(node.replace(/\,/g,'').trim()));

        $('<td />', {text: node}).appendTo(tr);
        tr = isNumb ? $('<tr />') : tr; // if number, create new row
        table.append(tr);
    }
});

小提琴

于 2013-10-08T14:46:48.217 回答
1

投入我的 2 美分:

小提琴

<div id = "stuff">
    Jacksonville Que
    <br/>
    Jack Johnson Qc
    <br/>
    160,786,000
    <br/>
    Janesonville pour l'elaboration de
    <br/>
    Janesonville for policy of
    <br/>
    Janesonville for zczdzc policy offff
    <br/>
    150,585,685
    <br/>
</div>

js:

var str = jQuery('#stuff').text();
var tokens = str.split(/\n/);
var val = '';
var j = 0;
var out = [];
out[j] = [];
for(var i = 0; i < tokens.length; i++){
    val = tokens[i].trim();
    if(val !== ''){
        out[j].push(val);
        if(val.match(/(\d+,?)/)){
            j++;
            out[j] = [];
        }
    }

}
out.pop();
console.log(out);

输出数组,然后随心所欲

[
Array[3]
0: "Jacksonville Que"
1: "Jack Johnson Qc"
2: "160,786,000"
, 
Array[4]
0: "Janesonville pour l'elaboration de"
1: "Janesonville for policy of"
2: "Janesonville for zczdzc policy offff"
3: "150,585,685"
]
于 2013-10-08T15:05:02.787 回答
0

可能是因为你正在使用.text() try to use it with.html()

于 2013-10-08T14:39:06.247 回答
0
var arr = $.grep($("#stuff").text().split("\n"), function(n, i) {
    if (n != "") return n;
});
var result = new Array();
$.each(arr, function(i, n) {
    result.push(n);
    if (((i + 1)%3) == 0) {
        console.debug(result.join(" "));
        result = new Array();
    }
});

结果 :

Jacksonville Que Jack Johnson Qc 160,786,000 
Janesonville pour l'elaboration de Janesonville for policy of 150,585,685 
于 2013-10-08T14:52:09.087 回答