JavaScript и стиль копирования - PullRequest
8 голосов
/ 18 января 2010

Я копирую ячейку таблицы с помощью JavaScript.

Работает нормально, просто не копирует стиль. Я хотел скопировать, как показано ниже, но это не сработало. newCell.style = oldCell.style;

Итак, я решил, что для выравнивания текста я должен скопировать его так: newCell.style.textAlign = oldCell.style.textAlign;

Это сработало, но всякий раз, когда я добавляю новый элемент стиля, я должен не забывать регистрировать его здесь.

Итак, моя проблема сейчас в том, как я могу зациклить стиль и скопировать каждый элемент там?

С хромом мне удалось сделать это так:

 var strAttribute = GetDomNameFromAttributeName(oRow.cells[1].style[0]);
    var styletocopy = eval('oRow.cells[1].style.'+strAttribute);
    eval("newCell.style."+strAttribute+"='"+styletocopy+"'"); // //newCell.style.textAlign='center';

Но это не работает с IE. Не тестировал его с FF, но предполагал совместимость с хромом.

Есть ли способ перебрать элементы стиля в IE? Или есть ли лучший способ скопировать все элементы стиля?

Ответы [ 2 ]

11 голосов
/ 18 января 2010
eval('oRow.cells[1].style.'+strAttribute)

Никогда не используйте eval, как это (*).В JavaScript вы можете получить доступ к свойству, имя которого хранится в строке в квадратных скобках.object.plop - это то же самое, что и object['plop']:

to.style[name]= from.style[name];

(*: никогда не используйте eval, если вы можете помочь. Есть только несколько очень специфических и редких случаев, когда вам это нужно.)

Есть ли способ зацикливания элементов стиля

Предполагается, что объект style поддерживает CSS CSSStyleDeclaration DOM уровня 2 *1017* интерфейс.Вы можете зациклить правила и применить их к другому элементу, как это:

for (var i= from.style.length; i-->0;) {
    var name= from.style[i];
    to.style.setProperty(name,
        from.style.getPropertyValue(name),
        priority= from.style.getPropertyPriority(name)
    );
}

в IE?

Нет, IE не поддерживает весь интерфейс CSSStyleDeclaration ивыше не будет работать.Однако есть более простой способ, не включающий зацикливание: будет работать на IE и других браузерах:

to.style.cssText= from.style.cssText;

Так просто!IE не совсем сохраняет текст CSS так, как должен, но различие не имеет значения для простого копирования в стиле inline.

Однако, как сказал Пикрасс (+1), если вы копируете целый элементи не только стили, cloneNode - безусловно, самый элегантный способ сделать это.

9 голосов
/ 18 января 2010

Вы можете скопировать элемент DOM со всем его содержимым (включая атрибуты) с .cloneNode (true):

var clonedTr = document.getElementById('id').cloneNode(true);

Тогда clonedTr является точной копией tr #id. «Истина» означает, что вы хотите скопировать содержимое элемента.

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