0

<tr>javascript の入力文字列からいくつかを解析したい。正規表現を使ってみました(<tr[^>]*>(?:.(?!</tr>))*.</tr>)*。しかし、私は最後の<tr>. jsfiddleも参照してください。

$("#container").append(content);

parts = new RegExp("^(.*tbody[^>]*>)(.*)(</tbody>.*)").exec(content);
table = parts[1] + parts[3];
rowString = parts[2];
$("#rowString").text(rowString);

// This is the interesting row:
rows = new RegExp("(<tr[^>]*>(?:.(?!</tr>))*.</tr>)*").exec(rowString);

$("#count").text(rows.length - 1 + " row(s) found");

for (rowIndex = 1; rowIndex < rows.length; rowIndex += 1) {
    rowListItem = $("<li></li>");
    rowListItem.text(rows[rowIndex]);
    $("#list").append(rowListItem);
}

アップデート

回答ありがとうございます。DhruvPathak が提案した方法で実行します。残念ながら、大きなテーブルで「RangeError: Maximum call stack size exceeded」が発生するため、jQuery はオプションではありません。もう必要ありませんが、正規表現の何が問題なのか誰か知っていますか?

4

2 に答える 2

2

代わりに、この文字列を document.createElement によって作成されたノードの innerHTML として設定し、getElementsByTagName を使用します。

例: http://jsfiddle.net/5JwXr/

var parentCont = document.createElement('div');
parentCont.innerHTML = content ;
x = parentCont.getElementsByTagName('tr');
alert(x.length);
于 2013-07-30T13:22:26.710 に答える
0

これは、コードを完全にやり直した結果です...正規表現の代わりにjqueryを使用しています(一部でjqueryを使用していることに気づきました):http://jsfiddle.net/T66ph/8/

$("#container").append(content);
$tbody = $(content).find("tbody");
$("#rowString").text($tbody.html());
$rows = $tbody.find("tr");
$("#count").text($rows.length + " row(s) found");
$temp = $("<div>");
$rows.each( function() {
    $temp.append($("<li>").text(this.outerHTML));
});
//adding the DOM all at once instead of little by little will help performance
$("#list").append($temp.html());
于 2013-07-30T13:38:43.863 に答える