使用按钮 onclick 传递多个值
Pass multiple values with button onclick
有类似的帖子,但我找不到适合我的独特案例的解决方案。
我有一个脚本,可以在用户单击突出显示按钮时突出显示关键字。目前它只突出显示单词 "fox",但我需要它突出显示其他单词,在本例中为 "fence" 和 "jumped".
这里是HTML:
<div id="inputText">
The fox quickly jumped over the fence.
</div>
<button onclick="highlight('fox')">Highlight</button>
我尝试将 'fox'
更改为 '+fox+','+fence+','+jumped+'
但没有成功。
javascript是:
function highlight(text)
{
inputText = document.getElementById("inputText")
var innerHTML = inputText.innerHTML
var index = innerHTML.indexOf(text);
if ( index >= 0 )
{
innerHTML = innerHTML.substring(0,index) + "<span class='highlight'>" + innerHTML.substring(index,index+text.length) + "</span>" + innerHTML.substring(index + text.length);
inputText.innerHTML = innerHTML
}
}
和CSS:
.highlight
{
background-color:yellow;}
不要在标记中使用 onclick
,您应该尝试利用最佳实践并仅通过 javascript 绑定事件,因为这是将处理程序附加到 DOM 元素的最不显眼的方式.
此外,您可以在重复突出显示代码的数组中定义要突出显示的单词,例如下面的 fiddle。
(function() {
function highlight() {
var wordsToHighlight = ["fox", "fence", "jumped"];
wordsToHighlight.forEach(function(text) {
inputText = document.getElementById("inputText")
var innerHTML = inputText.innerHTML
var index = innerHTML.indexOf(text);
if (index >= 0) {
innerHTML = innerHTML.substring(0, index) + "<span class='highlight'>" + innerHTML.substring(index, index + text.length) + "</span>" + innerHTML.substring(index + text.length);
inputText.innerHTML = innerHTML
}
});
}
button = document.getElementById('btn-highlight');
button.onclick = highlight;
})();
.highlight {
background-color: yellow;
}
<div id="inputText">The fox quickly jumped over the fence.</div>
<br/>
<button id="btn-highlight">Highlight</button>
注意标记中的 id="btn-highlight"
,以及 highlight
函数与点击事件的绑定。
我们可以传递一个分隔字符串,然后将其拆分为一个数组。您可以使用任何您想要的分隔符,但我选择了逗号。然后您可以遍历此数组以突出显示单词。
<div id="inputText">
The fox quickly jumped over the fence.
</div>
<button onclick="highlight('fox,fence,jumped')">Highlight</button>
<script>
function highlight(text){
var i, index, words = text.split(",");
var inputText = document.getElementById("inputText");
var innerHTML = inputText.innerHTML;
for(i=0;i<words.length;i++){
index = innerHTML.indexOf(words[i]);
if (index >= 0) {
innerHTML = innerHTML.substring(0,index) + "<span class='highlight'>" + innerHTML.substring(index,index+words[i].length) + "</span>" + innerHTML.substring(index + words[i].length);
inputText.innerHTML = innerHTML;
}
}
}
</script>
<button onclick="highlight('fox')+highlight('jumped')+highlight('fence')">Highlight</button>
更好的方法是使用像对象这样的预制字典:
DEMO 和来源:JSnippet DEMO
JS:
var dic = {
fox:['fox','jumped','fence'],
cat:['cat','happy']
};
function parse(target) {
var inputText = document.getElementById("inputText");
inputText.innerHTML = inputText.innerHTML.replace(/(<([^>]+)>)/ig,"");
if (typeof dic[target] === 'object')
for (var i=0; i<dic[target].length; i++)
tokenize(dic[target][i]);
}
function tokenize(text) {
var inputText = document.getElementById("inputText");
var inner = inputText.innerHTML;
var index = inner.indexOf(text);
if ( index >= 0 ) {
inner = inner.substring(0,index) +
"<span class='highlight'>" + inner.substring(index, index + text.length) + "</span>" +
inner.substring(index + text.length);
inputText.innerHTML = inner;
}
}
有类似的帖子,但我找不到适合我的独特案例的解决方案。
我有一个脚本,可以在用户单击突出显示按钮时突出显示关键字。目前它只突出显示单词 "fox",但我需要它突出显示其他单词,在本例中为 "fence" 和 "jumped".
这里是HTML:
<div id="inputText">
The fox quickly jumped over the fence.
</div>
<button onclick="highlight('fox')">Highlight</button>
我尝试将 'fox'
更改为 '+fox+','+fence+','+jumped+'
但没有成功。
javascript是:
function highlight(text)
{
inputText = document.getElementById("inputText")
var innerHTML = inputText.innerHTML
var index = innerHTML.indexOf(text);
if ( index >= 0 )
{
innerHTML = innerHTML.substring(0,index) + "<span class='highlight'>" + innerHTML.substring(index,index+text.length) + "</span>" + innerHTML.substring(index + text.length);
inputText.innerHTML = innerHTML
}
}
和CSS:
.highlight
{
background-color:yellow;}
不要在标记中使用 onclick
,您应该尝试利用最佳实践并仅通过 javascript 绑定事件,因为这是将处理程序附加到 DOM 元素的最不显眼的方式.
此外,您可以在重复突出显示代码的数组中定义要突出显示的单词,例如下面的 fiddle。
(function() {
function highlight() {
var wordsToHighlight = ["fox", "fence", "jumped"];
wordsToHighlight.forEach(function(text) {
inputText = document.getElementById("inputText")
var innerHTML = inputText.innerHTML
var index = innerHTML.indexOf(text);
if (index >= 0) {
innerHTML = innerHTML.substring(0, index) + "<span class='highlight'>" + innerHTML.substring(index, index + text.length) + "</span>" + innerHTML.substring(index + text.length);
inputText.innerHTML = innerHTML
}
});
}
button = document.getElementById('btn-highlight');
button.onclick = highlight;
})();
.highlight {
background-color: yellow;
}
<div id="inputText">The fox quickly jumped over the fence.</div>
<br/>
<button id="btn-highlight">Highlight</button>
注意标记中的 id="btn-highlight"
,以及 highlight
函数与点击事件的绑定。
我们可以传递一个分隔字符串,然后将其拆分为一个数组。您可以使用任何您想要的分隔符,但我选择了逗号。然后您可以遍历此数组以突出显示单词。
<div id="inputText">
The fox quickly jumped over the fence.
</div>
<button onclick="highlight('fox,fence,jumped')">Highlight</button>
<script>
function highlight(text){
var i, index, words = text.split(",");
var inputText = document.getElementById("inputText");
var innerHTML = inputText.innerHTML;
for(i=0;i<words.length;i++){
index = innerHTML.indexOf(words[i]);
if (index >= 0) {
innerHTML = innerHTML.substring(0,index) + "<span class='highlight'>" + innerHTML.substring(index,index+words[i].length) + "</span>" + innerHTML.substring(index + words[i].length);
inputText.innerHTML = innerHTML;
}
}
}
</script>
<button onclick="highlight('fox')+highlight('jumped')+highlight('fence')">Highlight</button>
更好的方法是使用像对象这样的预制字典:
DEMO 和来源:JSnippet DEMO
JS:
var dic = {
fox:['fox','jumped','fence'],
cat:['cat','happy']
};
function parse(target) {
var inputText = document.getElementById("inputText");
inputText.innerHTML = inputText.innerHTML.replace(/(<([^>]+)>)/ig,"");
if (typeof dic[target] === 'object')
for (var i=0; i<dic[target].length; i++)
tokenize(dic[target][i]);
}
function tokenize(text) {
var inputText = document.getElementById("inputText");
var inner = inputText.innerHTML;
var index = inner.indexOf(text);
if ( index >= 0 ) {
inner = inner.substring(0,index) +
"<span class='highlight'>" + inner.substring(index, index + text.length) + "</span>" +
inner.substring(index + text.length);
inputText.innerHTML = inner;
}
}