Удалить элемент из строки HTML в JQuery - PullRequest
4 голосов
/ 02 декабря 2011

Итак, я довольно озадачен тем, как исключить дочерних дочерних элементов из выбора в 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("");

Я открыт для других методов выбора, которые будут получать только текст в пределах этого конкретного тд.

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Вы утверждаете, что "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


Или, благодаря методу .end() в jQuery, вы можете сделать все это за один снимок так:

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

JSFIDDLE DEMO

2 голосов
/ 02 декабря 2011

Что такое d?Когда я создал пример вашего js / HTML, он, кажется, работал нормально.Вы можете увидеть это здесь:

http://jsfiddle.net/v7Qm2/

Возможно ли, что вы ограничиваете область до d, когда вы не должны быть?

ПРИМЕЧАНИЕ:

Просто чтобы уточнить, я отвечаю, что ваш код выглядит хорошо и, кажется, делает то, что вы хотите.Я думаю, проблема в том, что вы ограничиваете область действия своего селектора, когда не должны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...