0

Обратите внимание на псевдокод и форматирование, я не могу запомнить код с головы.Internet Explorer 10 - (Javascript или jQuery) Как изменить атрибуты и свойства, не зная, какой тип (динамические изменения)?

В IE9 и ниже я знаю, что вы можете устанавливать свойства и атрибуты с помощью метода setAttribute(), но это, похоже, было изменено в IE10 разделяющими атрибутами и свойствами отдельно.

Даже делать что-то вроде

element.setAttribute("className", "myClass"); 

устанавливает элемент выступать в качестве

<tag className = "myClass" /> 

, который даже не установить свойство.

В моем коде у меня есть список JSON, который я использую для хранения имен и значений атрибутов/свойств, которые я просто устанавливаю с помощью setAttribute();

createElement(tag, list) 
{ 
    //pseudocode 
    var element = createElementWithTag(tag); 
    for each(attr in attributes) 
     if (attributes.hasOwnKey(attr)) 
      element.setAttribute(attr, attributes[attr]); 
} 

И это отлично работает для IE7-9, но полностью не работает в IE10.

Есть ли способ установить свойство и атрибут без какого типа (attr или prop)?

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

Решение, вероятно, также будет полезно.

ответ

1

я думаю, что-то вроде этого является то, что вы хотите:

function tag(tag, attribs) { 
    if(tag.charAt) tag = document.createElement(tag); 
    var alias = { 
     htmlFor: "for", 
     className: "class" 
    }, prop; 
    for (prop in attribs) if (attribs.hasOwnProperty(prop)) { 
     if("style" == prop) tag.style.cssText = attribs[prop]; 
     try { 
      tag[prop] = attribs[prop]; 
     } catch (h) { 
      tag.setAttribute(alias[prop] || prop, attribs[prop]); 
     } 
    } 
    return tag; 
} 


//test it: 
tag("a", {href:"/", target:"_blank", innerHTML:" some text ", className: "1 2 3"}).outerHTML 

протестирован в IE8 и Chrome.

, если кто-либо знает больше dom-> присваивает сопоставления (например, htmlFor), пожалуйста, отредактируйте их в ответ, спасибо!

+0

Это сработало, спасибо кучу! Я бы поднял голову, если бы у меня была достаточно репутации ... Я немного опасаюсь попыток блокировки, потому что они замедляют работу, и хотя это, вероятно, не очень важно на небольшой веб-странице, я решил сделать это: if (tag [prop! == "undefined") tag [prop] = attribs [prop] else tag.setAttribute [prop, attribs [prop]); Не уверен, что это лучшая реализация, хотя ... – MaskedTwilight

+0

Также вы можете объяснить, почему вы использовали tag.setAttribute (alias [prop] || prop, attribs [prop]) вместо просто tag.setAttribute [prop, attribs [prop]) ;? – MaskedTwilight

+0

@MaskedTwilight: ваш оператор if всегда будет правдой, снимите кавычки вокруг неопределенного. единственное, что нужно попробовать - это установить свойство, которое очень быстро и может позволить себе замедлиться без какого-либо воздействия. если вы используете его строго, вы можете уйти с его удалением. попытка состоит в том, чтобы исключить исключения из таких странных тегов, как вставка и при установке определенных свойств в IE, которые не нравятся. псевдоним необходим для перевода «className» в «класс» для вызова setAttribute. он гомогенизирует между именами имен и именами свойств. – dandavis

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

  • Нет связанных вопросов^_^