2013-10-08 52 views
0

我必须遵循这个模式的HTML文档中删除
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> 

我基本上是想将此信息convern到表所以它看起来像:

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

我知道我可以这样做:

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

但是,这删除了所有<br>s - 我有麻烦提出的代码,将考虑到该模式。这变得更加成问题,因为在数字之前可能有1行文本,或者3 - 没有设置,唯一的实际定义模式是,当数字出现时,行结束,并开始新行。

+0

选择所有与本地js,f的东西div的子节点将所有不是文本节点或中断标签的节点列出来,然后迭代它们并按照你想要的方式放置它们。在处理像这样的文本操作时,jQuery并没有真正帮助很多。 –

回答

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); 
    } 
}); 

FIDDLE

0

可能是因为您使用.text() 尝试与.html()

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 
1

把我的2美分:

fiddle

<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" 
] 
+0

我希望自从我实际使用这一个以后,我可以更多地赞扬这一个 - 尽管上面的答案给了我一直在寻找的表格。 –