2011-12-02 41 views
4
删除元素

所以,我很为难至于如何从JQuery的入门选择排除子儿......从HTML字符串中的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中的文本。

+0

你说'排除子女',你想排除哪个子女?或者你的意思是排除所有这些。 –

+0

这完全有可能根本不可行,但[使用正则表达式会更容易吗?](http://jsfiddle.net/bemnn/) – sdleihssirhc

回答

3

您声明d是HTML字符串”

这意味着,当你这样做:从同一未修改

$('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

你是我的英雄! :) – Bri

+1

+1,很好的捕获。 –

2

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

http://jsfiddle.net/v7Qm2/

难道你限制范围d时,你不应该?

注:

只是为了澄清,我的回答是,你的代码看起来很好,似乎你想要做什么。我认为问题在于,当你不应该的时候,你限制了选择范围。

+0

这似乎更像是问题而不是答案。 – RightSaidFred

+0

@RightSaidFred,已更新,试图澄清我的答案是什么。 –

+0

看起来更好,但不幸的是你的答案不正确。 @Bri没有在做DOM选择。 'd'表示一个HTML字符串,其中元素正在被创建。 – RightSaidFred