замена тега

Кто-нибудь знает, как установить новое имя тега для тега с помощью Jquery? Допустим, у меня есть HTML-документ, и я хочу заменить всю ширину 'fieldset' на 'div'. Заранее спасибо !


person pinkbubble    schedule 04.11.2009    source источник
comment
Почему бы вам не изменить FIELDSET на DIV в вашем HTML?   -  person Robert Koritnik    schedule 04.11.2009
comment
Мой код сгенерирован, я не могу изменить тег, к сожалению...   -  person pinkbubble    schedule 04.11.2009
comment
У вас есть проблемы с owerflow   -  person jmav    schedule 04.11.2009
comment
Причина, по которой я хочу изменить свой набор полей на div, заключается в том, что мой набор полей обрезается, когда я печатаю с помощью Firefox. Я уже пытался установить переполнение на «видимый» и высоту на «авто», но все же он не печатался должным образом...   -  person pinkbubble    schedule 04.11.2009


Ответы (4)


fs = $("fieldset");
for (i = 0; i < fs.length; i++) {
    var that = $(fs[i]);
    var fieldsetContent = that.html();
    that.replaceWith('<div>'+fieldsetContent+'</div>');
};

или попробуйте исправить переполнение этого css css:

fieldset {
    display: table-column;
}
<!–[if IE]>
fieldset {
    display: block;
}

Чем вы можете установить другие стили.

person jmav    schedule 04.11.2009
comment
Я обновил свою версию Jquery, но она все равно не работает... Вот мой код ‹code› /*$(fieldset).each(function(i) { fieldsetContent = $(this).innerHTML(); $(‹div class='fieldset'› + fieldsetContent +‹/div›).replaceAll(fieldset); });*/ ‹/code› - person pinkbubble; 04.11.2009
comment
Спасибо jmav, я попробовал ваше решение, но оно не сработало так, как я хочу. Когда я делаю предупреждение о «fieldsetContent», он возвращает содержимое моего набора полей, но когда я помещаю его в параметры функции «replaceWith», он ничего не делает... Я могу либо решить одну сторону проблемы ( хорошо, чтобы изменить мой набор полей на div), но когда я объединяю его, добавляя содержимое набора полей, ничего не происходит.... - person pinkbubble; 04.11.2009
comment
Я попробовал кодировать себя, и это работает. Пожалуйста, отправьте целую неизмененную страницу и страницу, которую вы хотели бы иметь. Я постараюсь помочь вам. Вы пользуетесь фаербагом?? - person jmav; 05.11.2009
comment
Лучше использовать для функции, а не для каждой. Это быстрее. Посмотрите net.tutsplus. com/tutorials/javascript-ajax/ раздел 3 - person jmav; 05.11.2009
comment
Вы можете увидеть мое исправление, если оно вам подходит: stackoverflow .com/questions/1673346/ - person jmav; 05.11.2009

Вы можете использовать replaceWith или replaceAll для замены элементов.

Вы должны вручную поместить содержимое из старого элемента в новый элемент.

$('fieldset').each(function(object){
    var html = this.html(); 
    this.replaceWith('div').html(html)
});

Что-то вроде этого. Код не проверен.

person Ikke    schedule 04.11.2009
comment
Я думаю, вам нужно будет сохранить содержимое HTML перед вызовом replaceWith(), что-то вроде (внутри тела функции выше): var h = $(this).html(); $(это).replaceWith('div').html(ч); - person Klemen Slavič; 04.11.2009
comment
Я пробовал это: $(fieldset).each(function(i) { var fieldsetContent = $(this).html(); $(this).replaceWith(‹div class='fieldset'› + fieldsetContent + ‹/div ›); }) но это не сработало так, как я ожидал... Есть идеи? - person pinkbubble; 04.11.2009
comment
На самом деле, я использую jquery-1.js, и он возвращает ошибку, в которой говорится, что html() не является функцией... - person pinkbubble; 04.11.2009

Может быть, проще и эффективнее попытаться решить корень проблемы. Я не могу себе представить, что в Firefox есть что-то жестко закодированное, что приводит к отключению наборов полей. Я на 99% уверен, что это можно исправить с помощью CSS. Может быть, на форумах Mozilla вы сможете найти дополнительную информацию или оперативную помощь? Может быть, помогает проверка наборов полей и элементов div с помощью firebug и сравнение их настроек один за другим?

person Pekka    schedule 04.11.2009
comment
Привет, я уже пробовал все это ... О проблеме сообщалось, но приведенные решения не решили мою проблему. Но смысл моего поста в том, чтобы выяснить, есть ли способ заменить тэг и сохранить его содержимое. - person pinkbubble; 04.11.2009

Я не знаю, в какой среде вы находитесь, но, может быть, проще всего будет настроить страницу «просмотра для печати», которая динамически читает исходную HTML-страницу и выполняет низкоуровневую замену в исходном коде?

В PHP это будет выглядеть так:

$body = str_replace("<fieldset>", "<div>", $body);
$body = str_replace("</fieldset>", "</div>", $body);

Очень низкий уровень, но может работать, если HTML чистый.

person Pekka    schedule 04.11.2009
comment
У вас могут возникнуть проблемы с браузерами IE, тег должен быть полностью сгенерирован перед добавлением контента. - person jmav; 05.11.2009
comment
Нет, я имею в виду полную предварительную обработку HTML перед его выводом в браузер. Или вы имеете в виду что-то другое? - person Pekka; 05.11.2009