选择带有JavaScript和/或CSS的Shadow Dom?
似乎Chrome已弃用/deep/
和>>>
和::shadow
:https://www.chromestatus.com/features/6750456638341120
有没有人知道是否有其他方法可以访问影子DOM?
我的用例是尝试确定输入的样式。具体地说,我正在尝试检测是否显示占位符。
我已尝试el.shadowRoot
,但它返回空值,并且它的docs非常稀疏。
解决方案
您只能访问通过调用attachShadow( { mode: 'open' } )
创建的元素的影子DOM。如果是这样,那么调用shadowRoot
应该可以。
您无法从浏览器添加的用户代理控件(<input>
、<select>
)访问Shadow DOM。
要检查是否显示占位符,我要验证它是否存在以及输入值是否为空:
if ( myInput.getAttribute( "placeholder" ) && !myInput.value.length )
//the placeholder is being displayed
数据-lang="js"数据-隐藏="真"数据-控制台="假"数据-巴贝尔="假">
myInput.oninput = function() {
if (myInput.getAttribute("placeholder") && !myInput.value.length)
myInput.classList.add("empty")
else
myInput.classList.remove("empty")
}
body {
padding: 100px;
}
input {
border: 2px solid;
padding: 10px;
outline: none;
}
input:valid {
border-color: springgreen;
}
input:invalid {
border-color: tomato;
}
input[placeholder].empty {
border-color: darkturquoise
}
<input type="text" required placeholder="the placeholder" id="myInput" class="empty">
更新
Chrome和Safari支持css伪类:placeholder-shown
,该伪类可用于在显示占位符时设置元素的样式。
相关文章