如何用JQuery获取CSS隔离生成的b-开头随机字符串
解决CSS隔离下动态元素样式不生效的问题
核心思路是从页面已有的、受CSS隔离影响的元素上提取出以b-开头的随机属性名,再将该属性添加到动态生成的元素上,让动态元素匹配对应的CSS规则。
具体实现代码
方法1:从已有目标类元素提取属性
如果页面上已经存在带.test类的元素(受CSS隔离影响),可以直接遍历它的属性找到b-开头的属性:
// 获取第一个带test类的已有元素 const existingTestEl = $('.test').first(); let isolationAttr = ''; // 遍历元素属性,筛选b-开头的属性名 $.each(existingTestEl[0].attributes, function(_, attr) { if (attr.name.startsWith('b-')) { isolationAttr = attr.name; return false; // 找到后终止遍历 } }); // 动态添加元素时带上该属性 if (isolationAttr) { $('#main').append(`<div ${isolationAttr} class="test">Text</div>`); }
方法2:从根容器提取属性(更可靠)
CSS隔离的b-属性通常会加到组件的根容器上(比如示例中的#main),直接从根容器提取属性更稳妥:
const rootContainer = $('#main'); let isolationAttr = ''; $.each(rootContainer[0].attributes, function(_, attr) { if (attr.name.startsWith('b-')) { isolationAttr = attr.name; return false; } }); if (isolationAttr) { $('#main').append(`<div ${isolationAttr} class="test">Text</div>`); }
说明
CSS隔离生成的b-开头属性是当前隔离范围的唯一标识,对应的CSS规则只会匹配带有该属性的元素。通过上述方法提取属性名并添加到动态元素后,动态元素就能正确应用隔离后的样式。
内容的提问来源于stack exchange,提问作者Milad Ahmadi
相关产品推荐
相关产品推荐

