У меня есть 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
- у меня возникают проблемы с кодом, который учитывает шаблон. Это становится более проблематичным, потому что перед номером может быть 1 строка текста или 3 - это не задано, единственный REAL definate pattern - это то, что когда число представлено, строка заканчивается, и начинается новая строка.
Некоторая итерация с несколькими проверками по пути должна решить следующее:
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);
}
});
бросьте мои 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>
ЯШ:
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"
]
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
может быть потому, что вы используете .text()
пытаетесь использовать его с .html()