用 JS 原生方法实现 jQuery 的 append, prepend等常用方法

相当于$(el).before('html')

el.insertAdjacentHTML('beforeBegin', 'html');
el.insertAdjacentHTML('beforebegin',element);

相当于$(el).prepend('html')

el.insertAdjacentHTML('afterBegin', 'html');
el.insertBefore(element,el.firstChild);

相当于$(el).append('html')

el.insertAdjacentHTML('beforeEnd', 'html');
el.appendChild(element)

相当于$(el).after('html')

el.insertAdjacentHTML('afterEnd', 'html');
el.insertAdjacentElement('afterend',element)

1、addClass:为指定的dom元素添加样式。

$(el).addClass(className)//JQ
el.classList.add(className)
 
function addClass(obj, cls) {
    if (!this.hasClass(obj, cls)) {
        obj.className += " " + cls;
    }
}
 

2、removeClass:删除指定dom元素的样式。

$(el).removeClass(className)//JQ
el.classList.remove(className)
function removeClass(obj, cls) {
    if (hasClass(obj, cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
        obj.className = obj.className.replace(reg, ' ');
    }
}
 

3、toggleClass:如果存在(不存在),就删除(添加)一个样式。

$(el).toggleClass(className)//JQ
el.classList.toggle(className)
function toggleClass(obj,cls){
    if(hasClass(obj,cls)){
        removeClass(obj, cls);
    } else {
        addClass(obj, cls);
    }
}

4、hasClass:判断样式是否存在。

function hasClass(obj, cls) {
    return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}

$(el).offset()

let rect=el.getBoundingClientRect()
{
 top:rect.top+document.body.scrollTop,
 left:rect.left+document.body.scrollLeft
}

$(el).on(eventName,eventHandler)

el.addEventListener(eventName,eventHandler)

$(el).off(eventName,eventHandler)

el.removeEventListener(eventName, eventHandler)

$(el).remove()

el.parentNode.removeChild(el)

$(document).on(eventName, elementSelector, handler)

document.addEventListener(eventName, function(e) {
    const handler = function(e) {
        console.log(this)
        console.log(e)
    }
    for (var target = e.target; target && target != this; target = target.parentNode) {
        if (target.matches(elementSelector)) {
            handler.call(target, e);
            break;
        }
    }
}, false);

1. 直接设置style的属性 注:某些情况用这个设置 !important值无效

如果属性有'-'号,就写成驼峰的形式(如textAlign) 如果想保留 - 号,就中括号的形式 element.style['text-align'] = '100px';

element.style.height = '100px';

2. 直接设置属性(只能用于某些属性,相关样式会自动识别)

element.setAttribute('height', 100);
element.setAttribute('height', '100px');

3. 设置style的属性

element.setAttribute('style', 'height: 100px !important');

4. 使用setProperty 如果要设置!important,推荐用这种方法设置第三个参数

element.style.setProperty('height', '300px', 'important');

5. 改变class 比如JQ的更改class相关方法

因JS获取不到css的伪元素,所以可以通过改变伪元素父级的class来动态更改伪元素的样式

element.className = 'blue';
element.className += 'blue fb';

6. 设置cssText

element.style.cssText = 'height: 100px !important';
element.style.cssText += 'height: 100px !important';

7. 创建引入新的css样式文件

        function addNewStyle(newStyle) {
            var styleElement = document.getElementById('styles_js');

            if (!styleElement) {
                styleElement = document.createElement('style');
                styleElement.type = 'text/css';
                styleElement.id = 'styles_js';
                document.getElementsByTagName('head')[0].appendChild(styleElement);
            }
            
            styleElement.appendChild(document.createTextNode(newStyle));
        }

        addNewStyle('.box {height: 100px !important;}');

8. 使用addRule、insertRule

        // 在原有样式操作
        document.styleSheets[0].addRule('.box', 'height: 100px');
        document.styleSheets[0].insertRule('.box {height: 100px}', 0);

        // 或者插入新样式时操作
        var styleEl = document.createElement('style'),
            styleSheet = styleEl.sheet;

        styleSheet.addRule('.box', 'height: 100px');
        styleSheet.insertRule('.box {height: 100px}', 0);

        document.head.appendChild(styleEl);   
posted @ 2021-12-21 15:44  7c89  阅读(658)  评论(0编辑  收藏  举报