В JavaScript можно ли расширить DOM?

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

pd.read_csv(StringIO(re.sub(',+',',',df.to_csv())))
Out[20]: 
  Name  h1  h2  h3  h4
0    A   1   2   3 NaN
1    B   1   3 NaN NaN
2    C   1   3   2 NaN
24
задан nickf 23 April 2009 в 00:51
поделиться

4 ответа

Вы можете расширить DOM, используя прототип Элемента. Однако это не работает в IE7 и более ранних версиях. Вам нужно будет расширить конкретный элемент, по одному за раз. Библиотека прототипов делает это. Я рекомендую просмотреть источник , чтобы увидеть, как именно это делается.

21
ответ дан geowa4 28 November 2019 в 23:10
поделиться

Вы не должны напрямую расширять что-либо (под «чем-либо», я имею в виду нативные объекты DOM) - это приведет только к плохим вещам. Плюс повторное расширение каждого нового элемента (что нужно сделать для поддержки IE) добавляет дополнительные издержки.

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

var myDOM = (function(){
    var myDOM = function(elems){
            return new MyDOMConstruct(elems);
        },
        MyDOMConstruct = function(elems) {
            this.collection = elems[1] ? Array.prototype.slice.call(elems) : [elems];
            return this;
        };
    myDOM.fn = MyDOMConstruct.prototype = {
        forEach : function(fn) {
            var elems = this.collection;
            for (var i = 0, l = elems.length; i < l; i++) {
                fn( elems[i], i );
            }
            return this;
        },
        addStyles : function(styles) {
            var elems = this.collection;
            for (var i = 0, l = elems.length; i < l; i++) {
                for (var prop in styles) {
                    elems[i].style[prop] = styles[prop];
                }
            }
            return this;
        }
    };
    return myDOM;
})();

Затем вы можете добавить свои собственные методы с помощью myDOM.fn ... И Вы можете использовать это так:

myDOM(document.getElementsByTagName('*')).forEach(function(elem){
    myDOM(elem).addStyles({
        color: 'red',
        backgroundColor : 'blue'
    });
});
7
ответ дан James 28 November 2019 в 23:10
поделиться

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

Объект, который вам нужно расширить, это Element.prototype.

Element.prototype.getMyId = function() {
    return this.id;
};
22
ответ дан nickf 28 November 2019 в 23:10
поделиться

Да, можно, но настоятельно не рекомендуется.

Если вы переопределяете что-то, что другая библиотека ожидает от оригинала, или другая библиотека перезаписала что-то, что вы ожидали ... хаос!

Лучше всего хранить код в своем собственном пространстве имен / области видимости.

1
ответ дан Chad Grant 28 November 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: