網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術

回覆
 
主題工具
  #11  
舊 2005-08-24, 10:45 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

改好了, 還是沒用
<script>那一段我是放在<head>裡, 還是應該放在其他地方?
回覆時引用此篇文章
  #12  
舊 2005-08-24, 10:52 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

順便在問一下, 如果剛好碰到html code裡面剛好有這個字串, 那會發生啥事?
回覆時引用此篇文章
  #13  
舊 2005-08-24, 11:35 AM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

我發現你網頁內有個 clock.js 用到了 window.onload,所以 body 的 onload 就失效了,你可以把
代碼:
<script>
replaceKeyword();
</script>
放到網頁的最下面,可以解決這個問題。

另外建議這樣改:
代碼:
var re = new RegExp(keywords[i][0].replace(/\s+/, "\\s+"), "gi");
new RegExp(m[j], "gi");
沒有用 g 的話,網頁內有很多字串不會被取代。

如果遇到 html code 裡面有這個字串,或不想被修改的字串也被修改了,那就要再看看是什麼狀況,再修改 regular expressions 讓搜尋字串更精確即可。
回覆時引用此篇文章
  #14  
舊 2005-08-24, 11:46 PM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

work了, 可是也出現一個大問題
如果是原本這個字串所在的句子裡本身就帶有link, 那會被取代掉, 原本的link會失效.
舉例來說:
在這個scipt裡設定把google這個字串變成www.google.com的link
剛好我的頁面裡本來就有一個link是 google adsense指到https://www.google.com/adsense/?hl=zh_TW
套用這個script後就會變成google指到www.google.com, adsense就沒有link了, 原本的link就消失了
回覆時引用此篇文章
  #15  
舊 2005-08-25, 02:31 AM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

像這種類似的狀況會很多,需要先給個明確的定義,我先假設若字串後面跟著一個 < 表示已經有連結,就不取代,程式如下:
代碼:
function replaceKeyword(objID) {
  var text = "";
  if (objID != null) {
    text = document.getElementById(objID).outerHTML;
  } else {
    text = document.body.innerHTML;
  }
  for (var i = 0; i < keywords.length; i++) {
    var re = new RegExp("(" + keywords[i][0].replace(/\s+/, "\\s+") + ")([^<])", "gi");
    var m = re.exec(text);
    if (m != null) {
       text = text.replace(re, "<a href='" + keywords[i][1] + "'>$1</a>$2");
       m = re.exec(text);
    }
  }
  if (objID != null) {
    document.getElementById(objID).outerHTML = text;
  } else {
  	document.body.innerHTML = text;
  }
}
回覆時引用此篇文章
  #16  
舊 2005-08-25, 08:54 AM
oldboy oldboy 目前離線
進階會員
 
註冊日期: 2005-05-16
住址: CHINA
文章: 345
發送 ICQ 消息給 oldboy 發送 AIM 消息給 oldboy 發送 Yahoo! 消息給 oldboy
預設

高手过招。果然飞沙走石。小弟只能当睁眼瞎了:) 强!
回覆時引用此篇文章
  #17  
舊 2005-08-25, 09:12 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

可不可以變成如果字串後面不管多遠第一個接到的<是</a>就不取代, 這樣會不會比較好?
因為可能字串只會在一個link中間
回覆時引用此篇文章
  #18  
舊 2005-08-25, 01:47 PM
wmh wmh 目前離線
進階會員
 
註冊日期: 2004-08-27
文章: 310
預設

代碼:
function replaceKeyword(objID) {
  var text = "";
  if (objID != null) {
    text = document.getElementById(objID).outerHTML;
  } else {
    text = document.body.innerHTML;
  }
  for (var i = 0; i < keywords.length; i++) {
    var re = new RegExp("(" + keywords[i][0].replace(/\s+/, "\\s+") + ")([^<.]*)(<(/[^A]|[^/]))", "gi");
    var m = re.exec(text);
    if (m != null) {
	  text = text.replace(re, "<a href='" + keywords[i][1] + "'>$1</a>$2$3");
	  m = re.exec(text);
    }
  }
  if (objID != null) {
    document.getElementById(objID).outerHTML = text;
  } else {
  	document.body.innerHTML = text;
  }
}
這樣可以達到你的要求,不過這樣仍很容易破功,如果字串是像下面這樣包的就沒效了:
<a href=""><b>Keywords</b></a>

如果以這樣的思考方式下去做,可能會常常會碰到例外狀況,常常需要修改,我建議可以改用另一種方式,就是自己把想要轉為連結的字串用 [] 包起來,當遇到關鍵字被 [] 包起來時,比較容易確認是我們要改的地方。
回覆時引用此篇文章
  #19  
舊 2005-08-26, 04:05 AM
sea0964 sea0964 目前離線
進階會員
 
註冊日期: 2005-04-08
住址: www.deal13.net
文章: 479
發送 MSN 消息給 sea0964 發送 Yahoo! 消息給 sea0964
預設

還是破功了, 只要有人去edit post, 就會破功.
很好奇clicksor的廣告到底是怎麼弄的, 不會是一個條件一個條件列的吧?
它只會替換非連結部份的字串..
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 08:42 AM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.