使用 JS 获取正确的占位符颜色

Posted

技术标签:

【中文标题】使用 JS 获取正确的占位符颜色【英文标题】:Get the correct placeholder color with JS 【发布时间】:2019-02-20 15:13:42 【问题描述】:

我将输入的默认占位符颜色更改为蓝色。为什么我使用 javascript 得到黑色占位符颜色?

const getPlaceholderColor = () => 
  let inputEl = document.querySelector('.myClass');
  let inputElStyle = window.getComputedStyle(inputEl, '::placeholder');
  
  let resultTarget = document.getElementById('colorResult');
  let placeholderColor = inputElStyle.getPropertyValue('color');
  resultTarget.innerhtml = `Placeholder color: $placeholderColor`;
.myClass::placeholder 
  color: #004085;


.marginTop20 
  margin-top: 20px;
<input
  type="text"
  placeholder="Enter name"
  class="myClass"
/>

<button onClick="getPlaceholderColor()">Get placeholder color</button>

<div class="marginTop20" id="colorResult"></div>

【问题讨论】:

在 Firefox 56、Windows 7 上运行良好。您使用的是什么浏览器? 铬版本 68.0.3440.106 它可以在 Firefox 61.0.1 中运行。不在 Chrome 69.0.3497.92 【参考方案1】:

问题写在这里 => https://css-tricks.com/almanac/selectors/p/placeholder/

下面是一个使用 :placeholder-shown 和 ::placeholder 的 codepen

https://codepen.io/kipomaha/pen/pOOdQr

document.getElementById("myStyles").sheet.insertRule('.myClass:placeholder-shown  color: red; ');
document.getElementById("myStyles").sheet.insertRule('.myClass::placeholder  color: red; ');
const getPlaceholderColor = () => 
    let inputEl = document.querySelector('.myClass');
    let inputElStyle = window.getComputedStyle(inputEl, ':placeholder-shown');
    let resultTarget = document.getElementById('colorResult');
    let placeholderColor = inputElStyle.getPropertyValue('color');

    resultTarget.innerHTML = `Placeholder color: $placeholderColor`;



document.getElementById("myStyles").sheet.insertRule('.myClass:placeholder-shown  color: red; ');
document.getElementById("myStyles").sheet.insertRule('.myClass::placeholder  color: red; ');

var inputEl = document.querySelector('.myClass'); 
var placeholderColor = inputElStyle.getPropertyValue('color');
const getPlaceholderColor = () => 
    let inputElStyle = window.getComputedStyle(inputEl, ':placeholder-shown');
    let resultTarget = document.getElementById('colorResult');

    resultTarget.innerHTML = `Placeholder color: $placeholderColor`;

【讨论】:

感谢有用的 JS 解决方案。但是对于developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style,window.getComputedStyle() 还必须从外部样式表返回正确的样式属性 我相信如果您在外部工作表中使用正确的伪类和伪事件样式,它应该可以工作,我还没有对此进行测试,但我也没有阅读有关外部工作表的任何错误和getComputedStyle() 带有这个特定的 :placeholder-shown 或 ::placeholder 属性。 仅当输入为空时在 Chromium 中工作 这仅适用于占位符当前在输入元素中使用时的占位符。这就是我阅读 css-tricks 文章的方式。当它不活动时,它应该具有输入默认颜色的值,如果你没有分配它应该是黑色。 这只是一个建议,但也许您可以存储正在使用的值以便以后访问它。

以上是关于使用 JS 获取正确的占位符颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何对占位符应用不同的颜色并输入文本框值?

将输入占位符颜色更改为更暗

text 使用此输入占位符SCSS Mixin更改占位符属性的颜色。添加背景颜色或只更改文本颜色

使用 Swift 更改占位符文本颜色

为啥 Firefox 会改变我的输入/占位符颜色?

UITextField 占位符颜色