網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術
論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具
  #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。現在的時間是 06:27 AM


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