我想拥有它,以便每当用户键入'#'在搜索表单中,'#'是一种特定的颜色。
我认为执行此操作的唯一方法是用<span class="colorHash"></span>
替换该字符的每个实例,然后使用css将颜色应用于类。
这可能吗?有人能指出我正确的方向吗?
答案 0 :(得分:2)
一种解决方案是通过查看尽可能多地放置在实际输入上的元素来模拟文本输入。每次输入更改时都会更新此模拟,并包含颜色更改的哈希值。它没有指针事件,因此单击它将允许用户与底层实际输入进行交互。
Here是一个参考实现。这绝不是完美的,我不建议从中复制代码。
好东西:
<input>
元素中保持不变,因此可以正常使用表单。坏事:
<input>
元素,而是模仿。这会导致没有游标(坏),并可能导致其他问题。这意味着input[type=text]
上的所有样式也应该是模仿的。稍微不同的方法是让模拟物不可见,除了之外的红色哈希值。
Here是一个参考实现。这绝不是完美的,我不建议从中复制代码。
好东西:
坏事:
由于这似乎更接近您正在寻找的内容,我将在此处包含此版本的代码...
这段代码绝不是完美的,我不建议从中复制代码。
<div id="wrapper">
<input type="text" id="data-input">
<pre class="text-input-mimic" id="shown-data"></pre>
</div>
#wrapper { position: relative; }
#shown-data {
/* Stacked in top-left corner */
position: absolute;
top: 0;
left: 0;
/* Clicking and typing goes through to real input */
pointer-events: none;
}
.text-input-mimic, input[type=text] {
border: 1px solid grey;
width: 250px;
height: 20px;
padding: 5px;
display: inline-block;
margin: 0;
font-family: Calibri !important;
font-size: 16px !important;
}
.text-input-mimic {
/* Make invisible except for hashes */
background: none !important;
border: none !important;
color: rgba(0, 0, 0, 0);
/* Pixel-perfect adjustments */
padding-top: 7px;
padding-left: 6px;
}
.colored { color: red !important; }
JS(jQ):
$('#data-input').on("change keyup paste", function() {
let inp = $('#data-input').val();
let modified = inp.replace(/#/g, '<span class="colored">#</span>');
$('#shown-data').html(modified);
});
或者,JS(普通):
real = document.getElementById('data-input');
mimic = document.getElementById('shown-data');
real.addEventListener('input', function() {
let inputVal = real.value;
let modified = inputVal.replace(/#/g, '<span class="colored">#</span>');
mimic.innerHTML = modified;
});