我有很多HTML进入我的应用程序,我无法控制。它们包含布局表,我想摆脱它。它们可以是复杂的并且是嵌套的。
我想要的是基本上从表中提取HTML内容,以便我可以将其注入应用程序中的其他模板。
我只能使用jQuery或纯JS,没有服务器方面的技巧。
有没有人知道一个好的提示的jQuery插件可以完成这项工作?
Littm - 我的意思是从td标签中提取内容。我希望代码完成时不会留下任何表格。谢谢!
以下是相关HTML类型的示例。这一切都来自一些古老的应用程序通过XHR,所以我无法控制标记。我想要的是完全摆脱表格,只留下HTML或其他文本内容的其余部分。
<table>
<tr><td colspan="4"></td></tr>
<tr>
<td width="1%"></td>
<td width="40%" style="padding-left: 15px">
<p>Your access level: <span>Total</span></p>
</td>
<td width="5%">
<table><tr><td><b>Please note</b></td></tr></table>
</td>
<td width="45%" style="padding-left: 6px" valign="top"><p>your account</p></td>
</tr>
<tr><td colspan="4"> </td></tr>
<tr>
<td width="1%"></td>
<td width="40%" style="padding-left: 15px">
<table>
<tr>
<td align="right">Sort Code: </td>
<td align="center"><strong>22-98-21</strong></td>
</tr>
<tr>
<td align="right">Account Number: </td>
<td><strong>1234959</strong></td>
</tr>
</table>
</td>
<td width="5%"></td>
<td width="45%" style="padding-left: 6px">Your account details for</td>
</tr>
</table>
我试过了;
var data = ""
$("td").each(function(){
data += $(this).html()
});
$("article").append(data);
$("table").remove();
但var data
仍然包含嵌套的td标记。我不是JS专家,所以我不确定还有什么可以尝试....
答案 0 :(得分:1)
假设您有X个表格。
为了从中提取所有内容信息,您可以尝试这样的事情:
// Array containing all the tables' contents
var content = [];
// For each table...
$("table").each(function() {
// Variable for a table
var tb = [];
$(this).find('tr').each(function() {
// Variable for a row
var tr = [];
$(this).find('td').each(function() {
// We push <td> 's content
tr.push($(this).html());
});
// We push the row's content
tb.push(tr);
});
// We push the table's content
content.push(tb);
});
例如,如果我们有以下2个表:
<table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>A</td>
</tr>
</table>
<table>
<tr>
<td>r1</td>
<td>r2</td>
<td>r3</td>
</tr>
<tr>
<td>rA</td>
<td>rB</td>
</tr>
<tr>
<td>rP</td>
</tr>
</table>
数组content
将是这样的:
content = [ [ [1, 2], [A] ] ] , [ [r1, r2, r3], [rA, rB], [rP] ] ]
\_______________/ \______________________________/
1st table 2nd table
如果您想访问第一个表格,则只需访问content[0]
。
现在,让我们假设您有一个ID为my_div
的DIV,并且您希望在其中输出一些表格内容。
例如,假设您只想拥有第一个表。然后,你会做这样的事情:
// Note: content[0] = [[1, 2], [A]]
var to_print = "<table>";
for(var i=0; i<content[0].length; i++) {
to_print += "<tr>";
for(var j=0; j<content[0][i].length; j++)
to_print += "<td>"+ content[0][i][j] +"</td>";
to_print += "</tr>";
}
to_print += "</table>";
$("#my_div").html(to_print);
会给你这样的东西:
<div id="my_div">
<table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>A</td>
</tr>
</table>
</div>
希望这有帮助。
答案 1 :(得分:0)
编辑:您应该创建一个递归函数来执行此操作。
只需创建一个将“td”作为值的函数:
function searchTexts(td) {
if (td.find("td")) {
searchTexts(td.find("td"));
}
td.each(function(){
data += $(this).html()
$(this).remove(); // remove it for avoiding duplicates
});
}
然后调用它将jQuery对象传递给函数。