带有三进制if的左侧赋值无效

Invalid assignment left-hand side with ternary if

本文关键字:赋值 无效 if      更新时间:2023-09-26

我想创建这样的样式表:

var sheet = document.createElement('style'); sheet.type = 'text/css';
sheet.innerHTML = data.style;

但IE似乎需要自己的语法。为了简化这个答案的代码,我尝试了

var sheet = document.createElement('style'); sheet.type = 'text/css';
(sheet.styleSheet ? sheet.styleSheet.cssText : sheet.innerHTML) = data.style;

但这就抛出了ReferenceError: invalid assignment left-hand side

那么,我必须使用。。。

var sheet = document.createElement('style'); sheet.type = 'text/css';
if(sheet.styleSheet) sheet.styleSheet.cssText = data.style;
else sheet.innerHTML = data.style;

还是有更简单的替代方案?

您可以随时执行:

sheet.styleSheet ? sheet.styleSheet.cssText = data.style 
                 : sheet.appendChild(document.createTextNode(data.style));

FIDDLE

以下是一个解决方案,它不会让未来的维护人员怀疑代码到底做了什么:

function setSheetContent( sheet, text ) {
    if(sheet.styleSheet)
        sheet.styleSheet.cssText = text;
    else
        sheet.innerHTML = text;
}
var sheet = document.createElement('style');
sheet.type = 'text/css';
setSheetContent( sheet, data.style );

或者为了更方便而将其包装起来(如果您永远不想更改现有纸张的内容)

function stylesheetWithContent( sheet, text ) {
    var sheet = document.createElement('style');
    sheet.type = 'text/css';
    if(sheet.styleSheet)
        sheet.styleSheet.cssText = text;
    else
        sheet.innerHTML = text;
    return sheet;
}
var sheet = stylesheetWithContent( data.style );