中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

獲取元素的最終樣式

發布時間:2020-07-15 03:42:25 來源:網絡 閱讀:762 作者:iampomelo 欄目:開發技術

    看到這樣一道微信面試題:用JS代碼求出頁面上一個元素的最終的background-color,不考慮IE瀏覽器,不考慮元素float情況。(2017.3.1補充:賽賽同學提醒了我,還要考慮background這個復合屬性,情況變得異常復雜了,以下代碼是之前的,沒有考慮。)

    由于element.style.cssText只能訪問到元素內聯樣式即標簽style屬性,只能用document.defaultView.getComputedStyle,考慮IE的話可用element.currentStyle,不過element.currentStyle無法用于偽元素而document.defaultView.getComputedStyle可以。如果要考慮元素不可見或者沒有設定值的時候,backgroundColor的表現可以認為是其父元素的表現(題目的“不考慮元素float情況”)也是這個意思吧。讓我來寫寫代碼:

/**
 * 獲取元素自身css屬性
 * @param elem 元素
 * @param property 屬性名(這里不考慮float)
 * @returns {string} css屬性值
 */
function computedStyle(elem, property) {
    if (!elem || !property) {
        return '';
    }
    var style = '';
    if (elem.currentStyle) {
        style = elem.currentStyle[camelize(property)];
    } else if (document.defaultView.getComputedStyle) {
        style = document.defaultView.getComputedStyle(elem, null).getPropertyValue(property);
    }
    return style;
}


/**
 * 將-連接屬性名轉換為駝峰命名形式
 * @param {string} str -連接字符串
 * @returns {string} 駝峰命名字符串
 */
function camelize(str) {
    return str.replace(/-(\w)/g, function (s, p1) {
        return p1.toUpperCase();
    });
}


/**
 * 在elem獲取的背景色是否為最終的背景色
 * @param elem
 * @returns {boolean}
 */
function isFinalBGColor(elem) {
    var bgc = computedStyle(elem, 'background-color');
    return (!!bgc) && (bgc !== 'transparent') && (bgc !== 'rgba(0, 0, 0, 0)') && (computedStyle(elem, 'opacity') !== '0') && (computedStyle(elem, 'visibility') !== 'hidden') && (computedStyle(elem, 'display') !== 'none');
}


/**
 * 獲得元素最終的背景色(不考慮半透明疊加顏色的情況)
 * @param elem
 * @returns {string}
 */
function getFinalBGColor(elem) {
    if (isFinalBGColor(elem)){
        return computedStyle(elem, 'background-color');
    }else if (elem!==document.documentElement) {
        return getFinalBGColor(elem.parentNode);
    }
    return '';
}

    經過測試,在通常情況下,以上代碼可用。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新安县| 无棣县| 壶关县| 绵竹市| 陈巴尔虎旗| 长治市| 河间市| 石楼县| 库尔勒市| 潜江市| 新巴尔虎左旗| 济宁市| 衡东县| 宁陵县| 象山县| 定边县| 南乐县| 邵阳市| 甘谷县| 汝阳县| 柳州市| 安康市| 东宁县| 石台县| 开远市| 哈巴河县| 讷河市| 长葛市| 吉水县| 嘉黎县| 甘洛县| 澄迈县| 遂宁市| 贺州市| 隆子县| 新龙县| 淅川县| 伽师县| 揭西县| 襄汾县| 马尔康县|