JQuery 添加 Class 但视觉上没有变化

JQuery Adds Class but no visual change

我的 JQuery 代码将 class 添加到 html 但我没有看到任何视觉变化,有人知道为什么吗?我正在使用 DevExpress、Webforms。

.BoldRed {
    font-weight:bold;
    color:red;
}

function onTextBoxInit(s, e) {
    if (s.GetText().indexOf('1') > -1)
        $(s.GetInputElement()).addClass("BoldRed");
    else
        $(s.GetInputElement()).removeClass("BoldRed");
}

实际输出:

<input class="dxeEditArea_DevEx dxeEditAreaSys BoldRed" name="ctl00$ctl00$ASPxSplitter1$Content$ContentSplitter$MainContent$ASPxCallbackPanel1$ASPxFormLayout3$ASPxFormLayout3_E1" value="106971" id="ASPxFormLayout3_E1_I" onchange="aspxEValueChanged('ASPxFormLayout3_E1')" onblur="aspxELostFocus('ASPxFormLayout3_E1')" onfocus="aspxEGotFocus('ASPxFormLayout3_E1')" type="text" readonly="readonly" style="background-color: rgb(192, 224, 206);font-weight: bold;      color:red;">

内联样式比外部样式具有更高的优先级 css。您的 class 适用,但其规则已被覆盖。现在你有两种可能性:删除内联样式(首选),在你想要的具有更高优先级的规则末尾添加 !important。

我不认为添加 !important 应该是首选解决方案,除非绝对必要,我会执行以下操作:

document.querySelector('.BoldRed').style = '';

上面从元素中删除了内联样式,您的 addClass 样式不会被内联样式覆盖。

.BoldRed {
    font-weight: normal;
    color: white;
}

function onTextBoxInit(s, e) {
    if (s.GetText().indexOf('1') > -1)
        document.querySelector('.BoldRed').style = '';
        $(s.GetInputElement()).addClass("BoldRed");
    else
        $(s.GetInputElement()).removeClass("BoldRed");
}

注意:您的内联样式和您的 CSS 样式相同,我认为这是一个错误?

编辑 - 您可能需要将上面的查询选择器更改为:

document.querySelector('.dxeEditAreaSys').style = '';

例如:

function onTextBoxInit(s, e) {
        if (s.GetText().indexOf('1') > -1)
            document.querySelector('.dxeEditAreaSys').style = '';
            $(s.GetInputElement()).addClass("BoldRed");
        else
            $(s.GetInputElement()).removeClass("BoldRed");
    }