从JQuery中的html字符串中删除元素

时间:2011-12-02 16:58:10

标签: jquery jquery-selectors

所以,我对如何在JQuery中排除子子被选中感到非常难过......

这是我的字符串中的HTML结构:

<table>
   <tr>
       <td>some data I don't want.</td>
       <td>
       <table><tr><td>more data I don't want</td></tr></table>
       Text I want to extract here.
       </td>
   </tr>
</table>

注意:我没有选择这个。我试图从这个任意xml提要的结构中解析文本“我想在这里提取的文本”。

这是我的测试JQuery :( d是HTML字符串)

$('tr > td:eq(1) > table', d).remove();
var c = $('tr > td:eq(1)', d).text();

第一行不会删除表格。我测试选择器,它确实设法选择元素。我使用错误的方法删除元素吗?

我还尝试过使用not()replaceWith()而没有运气。

$('tr > td:eq(1)', d).not('tr > td:eq(1) > table').text();

$('tr > td:eq(1) > table', d).replaceWith("");

我对其他选择方法持开放态度,这些方法只会检索特定td中的文本。

2 个答案:

答案 0 :(得分:3)

您声明&#34; d是HTML字符串&#34;

这意味着当你这样做时:

$('tr > td:eq(1) > table', d).remove();
var c = $('tr > td:eq(1)', d).text();

...您需要两次从相同的 未修改的 字符串创建元素。


您需要创建 一次 之后的元素,然后缓存这些元素。

var $d = $(d);  // create the elements out of the string, and cache the set

$d.find('tr > td:eq(1) > table').remove();  // remove table from the cached set
var c = $d.find('tr > td:eq(1)').text(); // target the <td> and get its text

<强> JSFIDDLE DEMO


或者,由于jQuery的.end()方法,您可以像这样一次完成所有操作:

var c = $(d).find('tr > td:eq(1)')
            .children('table')
            .remove()
            .end()
            .text();

<强> JSFIDDLE DEMO

答案 1 :(得分:2)

什么是d?当我创建一个你的js / HTML的例子时,似乎运行正常。你可以在这里看到它:

http://jsfiddle.net/v7Qm2/

当您不应该将范围限制为d时,是否可能?

注意:

只是为了澄清,我的答案是你的代码看起来很好,看起来像你想做的。我认为问题在于你不应该限制选择器的范围。