<p>使用javascript更改标记文本颜色失败
<p> tag text color changed failed using javascript
我不明白为什么我不能更改文本"Welcome
"的颜色。以下是两种方法,如有任何帮助,将不胜感激。
<html>
<head>
<script language="text/javascript">
function changeColor(c) {
message.style.color=c;
}
</script>
</head>
<body>
<p id="message" style="color:orange"> Welcome </p>
<ul id="color">
<li onclick='changeColor(this.innerText);'>Blue</li>
<li onclick='changeColor(this.style.color);'>Red</li>
</ul>
</body>
</html>
你在依赖一些我建议不要依赖的东西:
-
message
是全局的,因为您已经将其作为id
值给出。相反,使用document.getElementById
查找元素。 -
innerText
主要是微软的东西。如图所示,您可以使用innerHTML
,这是一种可靠的跨浏览器,但我建议将颜色存储在data-
属性中,这样您的标签就可以是您想要的任何颜色(包括使用与CSS颜色名称不同的语言)。
以下是我可能在不引入任何库和保持简单的情况下处理它的方法:
标记:
<p id="message" style="color:orange"> Welcome </p>
<ul id="color">
<li data-color="blue">Blue</li>
<li data-color="red">Red</li>
</ul>
JavaScript:
(function() {
var ul = document.getElementById('color'),
list = ul.getElementsByTagName('li'),
message = document.getElementById('message'),
index;
for (index = 0; index < list.length; ++index) {
list[index].onclick = changeColor;
}
function changeColor() {
message.style.color = this.getAttribute('data-color');
}
})();
实例
包含JavaScript的script
标记必须在标记之后才能正常工作。
这完全依赖于标准,并且应该与所有主流浏览器兼容。data-
属性在HTML4中是无效的(如果验证是工作流程的一部分),但它们适用于所有主要(可能也适用于所有次要)浏览器。它们在HTML5中是有效的(它允许在任何元素上使用前缀为data-
的任何属性,正是出于这个目的)。
更新:在下面回复您的评论:
如何更改changeColor函数,使其接受changeColor(this.innerText);'?或者更改颜色(this.style.color)??
如果你想分离功能(完全合理),你可以这样做:
(function() {
var ul = document.getElementById('color'),
list = ul.getElementsByTagName('li'),
message = document.getElementById('message'),
index;
for (index = 0; index < list.length; ++index) {
list[index].onclick = changeColorViaDataAttr;
}
function changeColorViaDataAttr() {
changeColor(this.getAttribute('data-color'));
}
function changeColor(color) {
message.style.color = color;
}
})();
实例
由于函数只会更改message
元素的颜色,因此实际上最好稍微重命名这些函数,但您已经明白了。
离题:如果你利用那些创建了jQuery、Prototype、YUI、Closure或其他任何库的人所做的艰苦工作,很多这些事情都会变得容易得多。这些库有助于消除浏览器之间的差异,并提供许多实用功能。例如,我连接上面的事件处理程序(分配给onclick
属性)的方式,就像您的onclick
属性一样,是非常过时的,但由于旧的Microsoft浏览器,最新的方式会有所不同,因此会使示例变得相当复杂。图书馆为你处理这类事情。
以下是使用jQuery的相同JavaScript代码:
(function() {
$("#color li").click(changeColor);
function changeColor() {
$("#message").css("color", this.getAttribute("data-color"));
}
})();
实例
尽管如果你喜欢的话,你可以把它做得更紧凑:
(function() {
$("#color li").click(function() {
$("#message").css("color", $(this).data("color"));
});
})();
实例
message
是一个未定义的变量。你需要做的是:
function changeColor(c) {
document.getElementById('message').style.color = c;
}
<li onclick='changeColor(this.innerText);'>Blue</li>
不起作用,因为函数changeColor
需要将颜色作为参数,而不是文本。
<li onclick='changeColor(this.style.color);'>Red</li>
不起作用,因为未定义changeColor
主体中的变量message
。
如果你查看了浏览器的错误控制台,你至少会发现第二个错误。
如果你想使用元素的ID来获取元素,你需要这样做:document.getElementById("message")
所以,像这样:
<script type="javascript">
function changeColor(c)
{
document.getElementById("message").style.color=c;
}
</script>
changeColor
函数的参数应该是您想要显示的颜色。在函数中,您需要实际获得对要操作的DOM对象的引用,使用:
document.getElementById("message").style.color = c;
在您的示例中,message
是一个未定义的全局变量,因此将其替换为对所需DOM元素的引用,它应该可以正常工作。
- 在您的
script tag
中,您有language=
,应该是type=
- 您应该使用
document.getElementById("message")
而不是message
您应该为函数提供一个实际的颜色。
string text "Blue"
不是彩色function changeColor(c) { document.getElementById("message").style.color = c; }
一种选择是进行
<li style="color:Red" onclick='changeColor(this.style.color);'>Red</li>
而不是
<li onclick='changeColor(this.style.color);'>Red</li>
<html>
<head>
<script language="text/javascript">
function changeColor(c) {
message.style.color=c;
}
</script>
</head>
<body>
<p id="message" style="color:orange"> Welcome </p>
<ul id="color">
<li style="color:Red" onclick='changeColor(this.style.color);'>Red</li>
<li style="color:Blue" onclick='changeColor(this.style.color);'>Blue</li>
</ul>
</body>
</html>
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 高亮显示时编辑文本大小和颜色
- 用与线条相同的颜色填充多折线图上的点
- 更改使用Chart.js创建的图表中的轴线颜色
- 如何使用jquery更改html中的背景颜色
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- 动态更改高图中的系列颜色
- JsFiddle在分叉后描述失败
- jsf中两个字符串的颜色代码差异
- 我们如何使用css或JavaScript在i/j上更改句点(点)的颜色
- d3.hexbin插件-动态定义颜色域以适应数据
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 为什么这个jQuery颜色选择器在引导模式中失败
- JQuery键盘css分配颜色的按钮(键)与某些类失败
- 动态改变背景颜色失败
- 在imageData失败时替换颜色
- <p>使用javascript更改标记文本颜色失败
- 使用JavaScript构建SVG颜色阴影过滤器时失败