javascript - 带有特殊字符的条件输入占位符(十六进制值)

标签 javascript html reactjs

如何有条件地渲染占位符以返回字符,而不是字符串值本身?

为什么第二个输入占位符解释为特殊字符,而第一个输入占位符解释为字符串

class App extends React.Component{
  render(){
    const {mode} = this.props;
    return(
      <div>
      <div><input type="password" placeholder={mode ?"pass":"&#x25CF;&#x25CF;&#x25CF;&#x25CF;"} /></div>
<input type="password" placeholder="&#x25CF;&#x25CF;&#x25CF;&#x25CF;"/>
</div>
    )
  }
}

ReactDOM.render(
  <App mode={false}/>,
  document.getElementById("react")
);
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

最佳答案

正如评论所说,我们可以直接使用该符号。

还有另一个编程解决方案:DOMParser()

The DOMParser interface provides the ability to parse XML or HTML source code from a string into a DOM Document.

const yourText = `&#x25CF;`

const parser = new DOMParser();
const text = parser.parseFromString(yourText, "text/html").body.textContent;

placeholder={mode && text}

在此处查看更多示例:

const App = () => {
const InputMode0 = () => {
  return (
    <div>
      <input type="password" placeholder="&#x25CF;&#x25CF;&#x25CF;&#x25CF;" />
    </div>
  );
};
const InputMode1 = ({ mode }) => {
  const parser = new DOMParser();
  const text = parser.parseFromString(
    `&#x25CF;&#x25CF;&#x25CF;&#x25CF;`,
    "text/html"
  ).body.textContent;
  return (
    <div>
      <input
        type="password"
        {...(mode
          ? { placeholder: text }
          : { placeholder: `&#x25CF;&#x25CF;&#x25CF;&#x25CF;` })}
      />
    </div>
  );
};
const InputMode2 = ({ mode }) => {
  const parser = new DOMParser();
  const text = parser.parseFromString(
    `&#x25CF;&#x25CF;&#x25CF;&#x25CF;`,
    "text/html"
  ).body.textContent;
  return (
    <div>
      <input
        type="password"
        placeholder={mode ? text : `&#x25CF;&#x25CF;&#x25CF;&#x25CF;`}
      />
    </div>
  );
};

return (
  <div className="App">
    <InputMode0 />
    <InputMode1 mode={false} />
    <InputMode1 mode={true} />
    <InputMode2 mode={false} />
    <InputMode2 mode={true} />
  </div>
);
}
ReactDOM.render(<App />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.12.0/umd/react-dom.production.min.js"></script>

关于javascript - 带有特殊字符的条件输入占位符(十六进制值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60927416/

相关文章:

html - 使用 HTML5 在浏览器上流畅传输

javascript - 如何从外部 Html 文件获取 Google Apps 脚本中的ElementById?

ReactJS useState 钩子(Hook) : Can I update array of objects using the state variable itself?

javascript - 将 React 组件集成/注入(inject)到静态(已加载)HTML 中

javascript - 将 css 内容属性的字体大小缩放到父级

javascript - 为什么我的日期输入没有读取模型值?

javascript - 使用 Javascript/jQuery 读取 JSON

javascript - JavaScript 中 0 毫秒的 setInterval() 行为

Edge 中的 HTML 提交按钮已断开边框,但插入边框正确

javascript - 在同一个 useEffect 中依赖地使用相同的数据