2011-12-02 2 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(""); 

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

+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


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

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

Смежные вопросы