所以,我对如何在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 :(得分: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的例子时,似乎运行正常。你可以在这里看到它:
当您不应该将范围限制为d
时,是否可能?
注意:强>
只是为了澄清,我的答案是你的代码看起来很好,看起来像你想做的。我认为问题在于你不应该限制选择器的范围。