jQuery html()方法渲染异常求助:HTML标签被解析为纯文本
解决jQuery错误信息中HTML标签无法渲染的问题
嘿,这个问题我熟!咱们来一步步搞定它~
你现在遇到的核心问题是调用时传入的是转义后的HTML字符(<b>),而不是真正的<b>标签。虽然你的函数里用了obj.html(str),但<和>会被jQuery识别成纯文本,不会被解析成HTML元素,所以加粗效果出不来。
方案1:直接传入未转义的HTML标签(最简单)
这是最直接的解决办法,把调用里的转义字符换成原始HTML标签,同时恢复你函数里注释掉的判断逻辑(本来就是正确的逻辑)。
修正后的errMsg函数
(function($){ $.errMsg = function(obj, str){ if(typeof obj !== 'object'){ return; } // 恢复判断逻辑,确保只有字符串才设置内容 if(typeof str === 'string'){ obj.html(str); }else{ obj.html(''); } }; })(jQuery);
正确的调用代码
$(err).errMsg('<b>Error</b>. Invalid file(s) format or size greater than 2 Mb, please retry with different documents.');
这样调用后,html()方法会正确解析<b>标签,直接实现加粗效果。
方案2:如果必须处理转义后的字符串
如果你因为某些限制(比如后端返回的就是转义后的内容),只能传入<b>这类转义字符,那可以先把转义字符串还原成原始HTML,再渲染。
给你的函数加个转义还原的逻辑:
(function($){ // 新增还原转义HTML的工具函数 function unescapeHtml(str) { const tempEl = document.createElement('div'); tempEl.innerHTML = str; return tempEl.textContent; } $.errMsg = function(obj, str){ if(typeof obj !== 'object'){ return; } if(typeof str === 'string'){ // 先还原转义字符,再设置HTML obj.html(unescapeHtml(str)); }else{ obj.html(''); } }; })(jQuery);
这样即使你用原来的调用方式(传<b>),也能正确渲染加粗效果。
为什么之前的$.parseHTML没用?
因为你传入的是<b>,$.parseHTML会把它当成普通文本节点处理,而不是HTML标签。只有当你传入未转义的<b>时,它才会解析成<b>元素。所以关键还是要确保传入的是原始HTML标签,或者先把转义字符还原。
内容的提问来源于stack exchange,提问作者Patrik
相关产品推荐
相关产品推荐

