作者s25g5d4 (死城盗贼)
看板Ajax
标题Re: [问题] 有办法完全不用innerHTML吗?
时间Wed Jul 14 16:45:08 2010
※ 引述《TonyQ (沉默是金。)》之铭言:
: ※ 引述《No (you stay there)》之铭言:
: : 以s25大原有的架构
: : 改写成我的作法
: : 手边没IE6测
: : Firefox、Chrome5、IE8都可以run
: : 另外有加上一些叠字和嵌入一个youtube影片来测试诉求
: : 编辑: http://jsfiddle.net/D349J/1/
: : 结果: http://fiddle.jshell.net/D349J/1/show/light/
: 用自己习惯的方式整理程式码,顺便详阅一下做了什麽事情 XD
: ## FIX for ie only script.
: http://jsfiddle.net/RNwh8/6/
: 大概整理的方向如下:
: 1.固定且重复的字串改用全域变数写,方便改动。
: 2.一些跟主轴比较无关的逻辑实作其实可以拆出来(像getElementsByClassName)
: 有些函式或参数加上底线是为了不要跟default的函式冲到 XD
: 3.拆出来也比较方便针对不同 browser 去实做不同的逻辑。
: 4.有扯到regex的尽量放个sample方便了解regex行为
: 5.把复杂的呼叫行为 ex . a.xxx().yyy().ccc(fn()) 尽可能的分开,
: 除非那些行为本来就是用来设计做 chain method的...
: ---
: 不过凭良心讲,这个功能我还是比较宁愿用 jquery highlight plug-in 写 XD
: http://bartaz.github.com/sandbox.js/jquery.highlight.html
事情是这样的~
前几天在冥想(发呆)时
突然想到了一串regex
/(c+)|([^c]+)/g
简单的说就是
abcabababcccabacccababcccccccaccc
将会被切成
ab,c,ababab,ccc,aba,ccc,abab,ccccccc,a,ccc
真是好方便阿~
所以便着手重写了一次search()
http://jsfiddle.net/EgEcK/3/
//code base on TonyQ
function search(target,search_str)
{
var _tag=null,tag=target.firstChild;
var regex_search= new RegExp("("+search_str+"+)|([^"+search_str+"]+)","g");
do
{
if(tag.hasChildNodes()){
search(tag,search_str);
}
//用regexp是为了可找出叠字或字串连续叠字
if(tag.nodeName=='#text' && tag.nodeValue.match(search_str))
{
var matches=tag.nodeValue.match(regex_search);
for(var i=0;i<matches.length;i++)
{
tag.parentNode.insertBefore(
matches[i].match(search_str) ? createReplacedTxtNode(matches[i]) :
prependWordTxt(matches[i]),
tag);
}
_tag=tag.previousSibling;
deleteTag(tag);
tag=_tag;
}
tag=tag.nextSibling;
}
while(tag);
}
//其他有更改的函数
function prependWordTxt(prependWord){
var newTxtNode=document.createTextNode(prependWord);
return newTxtNode;
//其实传空字串进去也没关系阿~
}
if(!document.getElementsByClassName) {
document.getElementsByClassName=function(classN) {
var a=[];
var query_results = document.getElementsByTagName('*');
for(var i=0;i<query_results.length;i++) {
if(query_results[i].className==classN)
a.push(query_results[i]);
}
return a;
};
}
//是的 正是我前几天写的那个getElementsByClassName
function goSearch(target,search_str)
{
reverse_str();
if(search_str!="" && typeof search_str=="string" && target.nodeType==1)
search(target,search_str);
}
//多了几个检查
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.172.100.35
※ 编辑: s25g5d4 来自: 218.172.100.35 (07/14 16:54)
1F:推 No:这是用来做单字元搜寻的做法吗 07/14 22:43
2F:→ s25g5d4:呜呜 今天才被东尼大用水球点醒 07/14 23:12
3F:→ s25g5d4:这个regex有很大的问题阿 07/14 23:13
5F:→ s25g5d4:一直改不好就放弃了= = 07/14 23:13
6F:推 No:我还以为你是要做单字元的部份@@ 07/14 23:24