给文本加上<font>标签的问题
<html xmlns= "http://www.w3.org/1999/xhtml ">
<head>
<title> 色测试 </title>
<script language= "javascript " type= "text/javascript ">
function SetKeyColor(key, color, idStr)
{
if(color == null ||color == " ")
{
color = "red ";
}
SetNode(document.body, key, color, idStr)
}
function SetNode(obj, key, color, idStr)
{
if(obj.hasChildNodes() && obj.nodeType!=3)
{
var childNodes = obj.childNodes;
for(var i=0; i <childNodes.length; i++)
{
SetNode(childNodes[i], key, color, idStr);
}
}
else
{
if(obj.nodeName == "#text " && obj.nodeValue.replace(/^\s*|\s*$/g, " ") != " ")
{
var pid = obj.parentNode.id;
if(pid.indexOf(idStr) > -1)
{
obj.nodeValue = obj.nodeValue.replace(new RegExp(key, "g "), " <font color=red> " + key + " </font> ")
//alert(pid + "\r\n " + obj.nodeValue);
}
}
}
}
</script>
</head>
<body>
<div id= "a ">
ss <span> aa </span> <span> bb </span>
</div>
</body>
</html>
<script language= "javascript " type= "text/javascript ">
SetKeyColor( 's ', 'green ', 'a ');
</script>
要的结果是ss aa bb,其中ss是红色的,但最后在页面中却显示这样的文字: <font color=red> s </font> <font color=red> s </font> aa bb,请问如何解决?
[解决办法]
SetKeyColor( 'ss ', 'green ', 'a ');你传2个s ya
replace(new RegExp(key, "g "), " <font color=red> " + key + " </font> ")这不是你自己写的
吗
[解决办法]
替换的那句换下
obj.nodeValue = obj.nodeValue.replace(new RegExp(key+ "+ ", "g "), " <font color=red> " + key + " </font> ")
[解决办法]
如果key 是 sasa 呢?
[解决办法]
那只好换了,:)
obj.nodeValue = obj.nodeValue.replace(new RegExp( "( "+key+ ")+ ", "g "), " <font color=red> " + key + " </font> ")
不过楼主这样遍历确实不好,对象多了比较慢
[解决办法]
版主的写法测试过吗?为什么我这用没有效果
[解决办法]
TO xiaolei1982
版主的写法测试过吗?为什么我这用没有效果
-----------------------------
晕,我理解错了,以为楼主是想把字符串打出来把中间的标签去掉就行,原来是要把颜色显示出来
[解决办法]
hbhbhbhbhb1021(天外水火(我要多努力))
new RegExp( "( "+key+ ")+ ", "g ")
()+ 这种可以吗?()里面的可以重复?好像没这种用法吧
[解决办法]
可以用的,
<script language=javascript>
var str= "sasa "
re=/^(sa)+$/
alert(re.test(str))
</script>
不过那句没测试,要改成下面这样才能全部显示出来
obj.nodeValue = obj.nodeValue.replace(new RegExp( "(( "+key+ ")+) ", "g "), " <font color=red> $1 </font> ")
楼主的这个程序,最好在 ss那也加个标签,这样修改标签的className感觉要比遍历好
[解决办法]
<script>
var a= 'sasabsasasabsa '
alert(a.replace(/(sa)+/g, " "))
</script>
果然
[解决办法]
obj.nodeValue = obj.nodeValue.replace(new RegExp(key, "g "), " <font color=red> " + key + " </font> ")
str=obj.parentNode.outerHTML.toString()
str=str.replace(new RegExp( "< ", "g "), " < ")
str=str.replace(new RegExp( "> ", "g "), "> ")
obj.parentNode.outerHTML=str
这样就可以显示颜色了,比较笨!-_-
------解决方案--------------------
感觉我的方法比较笨,版主有好的方法吗?感觉应该会有吧