2009-06-29 3 views
2

я следующая структура HTML возвращается из запроса AJAX ...JQuery Html Манипуляция Вопрос

<th scope="col" style="yada,yada,yada"> 
<a href="javascript:funcName();" style="yada,yada,yada"> 
Test<br />Heading</a></th> 
<th scope="col" style="yada,yada,yada"> 
<a href="javascript:funcName2();" style="yada,yada,yada"> 
Test<br />Heading2</a></th> 

И я хочу, чтобы манипулировать этим, так что конечный результат ...

<th>Test<br />Heading</th> 
<th>Test<br />Heading2</th> 

Я в основном хочу удалить встроенные стили и извлечь текст из гиперссылки. Как я могу сделать это с помощью jQuery?

ответ

4

Предполагая $data является разобранный структура DOM выше ...

$data.find('th').each(function() { 
    $(this).removeAttr('scope').removeAttr('style').html(
     $(this).find('a').html() 
    ); 
}).appendTo(selector); 
+1

Не намного легче! Фантастично, спасибо. –

+1

Одна вещь, которую нужно добавить. Для чего это стоит, мне не нужно было устанавливать его в переменную. У меня был var такой: var tbl = $ (xhr.responseText), и все, что мне нужно было сделать, это использовать ваш код, чтобы вызвать его так: tbl.find ('th'). Each (function() {и т. Д. .}), а позже я просто добавил tbl к элементу, и он отлично работал. –

+0

Хммм. Думаю, я всегда считал, что все внутренние методы неизменны (отсюда парадигма «цепочка»). –

0

Похоже, самый простой подход должен был бы выбрать из текста, а затем использовать его для создания новых элементов TH, которые могут быть легко сделать в jQuery. Предполагая, что ваши данные в данных переменной по имени, вы хотите сделать что-то вроде:

var newTH = ''; // To store as you go 
$("th a", data).each(function(){ // Loop over all anchors in THs 
    newTH += "<th>" + $(this).html() + "</th>"; // Pull out the innerHTML of the anchor, wrap in TH 
}); 

Переменная Ньют теперь будет кусок HTML, который вы можете использовать JQuery для добавления в вашей таблицы.

Я бы посоветовал сначала создать его как строку, просто ради скорости. Манипулирование и изменение элементов DOM работает, но в зависимости от того, сколько TH вы получаете, это теоретически должно быть немного быстрее.

+1

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

+0

Я основываю это на информации, полученной от http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly, которая, кажется, выглядит достаточно надежной и повторяемой. :) Кроме того, скорость может быть не совсем актуальной в этом случае, но никогда не помешает делать все правильно в первый раз. :) –

+0

Причина, по которой первые примеры медленны на этой странице, заключается в том, что она вызывает добавление на каждой итерации, что неправильно делать - мой пример никогда не делал этого. Как вы можете видеть, далее идет речь о том, что строки не подходят для этого, но вместо этого лучше всего положить все это в массив и добавить один раз в конце. В этой ситуации это не имеет значения, потому что вместо создания более дорогих элементов мы просто модифицируем то, что уже существует. –

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