0

我正在寻找一个 jQuery 函数来解析 HTML 的一部分并从<td>div class="appArea" 中的第一个读取(存储在变量中)并继续读取 HTML,直到它到达带有 class="tb_pages" 类的表,然后停止。

我想我需要一个 each() 函数,但不能让它工作。

<div class="appArea">

<p class="cstmTitle">Team Wilson</p>
<table width="100%" cellpadding="5" cellspacing="0" border="0">
<tr valign="top">
<td>

<p>
<p>We are proud to do our part to change the future and make a positive impact in the lives of others.</p>
<p><strong>Bullet List Ex</strong>:</p>
<ul>
<li>First</li>
<li>Second </li>
</ul>

<table class="tb_pages" border="0">
<thead>
<tr>
<th>Bacon</th>
4

3 回答 3

2

丑陋:

var a = $('.appArea td:first').html().split('<table class="tb_pages"')[0];

var b = $('.appArea td:first').html().split(/<table(.*?)class="(.*?)tb_pages/)[0];

漂亮的:

var c = $('div').append(
        $('.appArea td:first table.tb_pages').prevAll().clone()
    ).html();

选择你的毒药。

于 2012-04-27T01:04:14.360 回答
2

我的“解决方案”不那么难看,但在效率上付出了代价:

var myHTML = "", isReading = false;

$(".appArea").children().each(function() {
    if(this.tagName == "td") isReading = true;
    else if($(this).hasClass("tb_pages") isReading = false;
    if(isReading) myHTML += $(this).html();
});

或者使用我最喜欢的if速记的解决方案,稍微难看但同样效率更高:

var myHTML = "", isReading = false;

$(".appArea").children().each(function() {
    this.tagName == "td" && (isReading = true);
    $(this).hasClass("tb_pages") && (isReading = false);
    isReading && (myHTML += $(this).html());
});

或者替代iambriansreed的答案,使用slice()代替split()(应该稍微快一点,但同样丑陋):

var $fullHTML = $(".appArea").html()
var myHTML = fullHTML.slice(fullHTML.indexOf("<td>"), fullHTML.indexOf('<table class="tb_pages"'));
于 2012-04-27T01:06:35.670 回答
0
$('div.appArea td:first table.tb_pages').prevAll()

将在 td 内但在 tb_pages 表之前获取所有内容。

于 2012-04-27T01:16:01.107 回答