Подтвердить что ты не робот

JQuery Удалить атрибуты стиля из ВСЕХ элементов

Я знаю, как удалить атрибут из одного элемента, есть уже некоторые сообщения об этом:

$("div.preview").removeAttr("style");

Это html-код:

<div class="preview" style="background-color:white">
   <p>Some text<span style="font-size:15px;">some text</span></p>
   some more code
</div>

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

Есть ли короткий способ сделать это?

UPDATE: Отлично, теперь я знаю, как это сделать. Но что, если html отправляется для работы в качестве строки, хранящейся в переменной. Поэтому вместо

$("div.preview") 

У меня

var string = '<div class="preview"><p style='font-size:15px;'>....</p><div>'

Есть ли способ сказать что-то вроде этого ниже?

$(string).find(*).removeAttr("style");
4b9b3361

Ответ 1

Вы можете использовать селектор подстановок *, чтобы выбрать все под div.preview.

jsFiddle

$('div.preview *').removeAttr('style');

Update

RE: ваш связанный вопрос, если у нас была строка, а не элементы DOM. Мы могли бы преобразовать их в объекты jQuery, удалить атрибут, как указано выше, а затем преобразовать обратно (при желании).

jsFiddle

// jQuery extension to get an element outer HTML
// http://stackoverflow.com/a/2419877/1156119
jQuery.fn.outerHTML = function(s) {
    return s
        ? this.before(s).remove()
        : jQuery("<p>").append(this.eq(0).clone()).html();
};

var string = '<div class="preview"><p style="font-size:15px;">....</p><div>'
var elements = $(string);
elements.find('*').removeAttr('style');

var withoutStyles = elements.outerHTML();
alert(withoutStyles);

Ответ 2

попробуйте: $("div.preview").children().removeAttr("style");

или: $("div.preview").find("*").removeAttr("style");, чтобы получить внуков тоже.

Ответ 3

$("div.preview,div.preview *")).removeAttr("style")

Ответ 4

$("div.preview, div.preview *").removeAttr("style");

Ответ 5

Выберите div, выберите его дочерние элементы, затем добавьте div обратно в коллекцию и удалите класс.

$('div.preview').find('[style]').addBack().removeAttr('style')
// replace addBack with andSelf for older jQuery
// if you don't want to remove it from the preview div, just leave addBack off.

однако, скорее всего, лучше исправить редактор, чем исправить результаты в конечном итоге.

Ответ 6

Вы можете попробовать это

$("div.preview").find('*').removeAttr("style");

Чтобы удалить стиль из всех дочерних элементов div.preview

Ответ 7

Попробуйте сделать это

$("#frameDemo").contents().find("#div_id").parent('div').removeAttr('onclick');
$("#frameDemo").contents().find("#div_id").children('div').removeAttr('onclick');