Correct function:
function addClass(element,value) {
if(!element.className) {
element.className = value;
} else {
newClassName = element.className;
newClassName += " ";
newClassName += value;
element.className = newClassName;
}
}
Is it okay to write it like this?
function addClass(element,value) {
if(!element.className) {
element.className = value;
} else {
newClassName += " ";
newClassName += value;
}
擁有18年軟件開發(fā)和IT教學(xué)經(jīng)驗。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項目經(jīng)理、高級軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
element.classList.add() is more convenient
If you want to be compatible with IE10 or below, then I have nothing to say
is equivalent to
element.className = element.className + " " + value;
There is a compatibility issue
element.classList.add('xxx');
Equivalent to the above, solving compatibility issues
element.className+=''+'xxx';
Other packaging methods
function hasClass(elements, cName) {
return !!elements.className.match(new RegExp('(\s|^)' + cName + '(\s|$)'));
};
function addClass(elements, cName) {
if (!hasClass(elements, cName)) {
elements.className += ' ' + cName;
};
};
function removeClass(elements, cName) {
if (hasClass(elements, cName)) {
elements.className = elements.className.replace(new RegExp('(\s|^)' + cName + '(\s|$)'), ' ');
};
};
The answer is definitely not possible
function addClass(element, value) {
if (!element.className) {
element.className = value;
} else {
newClassName += " ";
newClassName += value;
}
}
What this needs to be implemented is to add a class to the dom element. else
In the branch, you only operate a string. What is the use if it is not set to the dom element in the end? For the added class to take effect, it must be placed on the dom element
In addition, there is also a problem with your correct writing:
function addClass(element,value) {
if(!element.className) {
element.className = value;
} else {
// newClassName未聲明 ,隱式全局變量
newClassName = element.className;
newClassName += " ";
newClassName += value;
element.className = newClassName;
}
}
In factelse
branching can be simplified
function addClass(element, value) {
if (!element.className) {
element.className = value;
} else {
element.className += ' ' + value;
// += 運算符優(yōu)先級較低,實際相當(dāng)于
// element.className += (' ' + value);
// 即
// element.className = element.className + (' ' + value);
}
}
Can’t. The purpose of the function is to give element
加上一個叫value
的類,你else
里面根本沒有對element.className
進行賦值怎么行,那個newClassName
只是個變量,用來保存現(xiàn)有class
,并加上value
這個新class
后,塞回element.className
, so
First:
newClassName = element.className;//記下現(xiàn)有
is followed by:
element.className = newClassName;//塞回元素
In fact, the original function has a better way of writing. else
There is no need to get a variable in it, just spell it directly:
else {
element.className += " " + value;
}
No, it’s not possible. NewClass must be assigned first after the else statement before the operation can be reassigned to element.className. If it is removed, it seems that there is no such function