2012-03-05 65 views
0

我對javascript(只做JAVA)不太瞭解,但是還沒有對我發現的一些JavaScript代碼(來自Google書籤)進行黑客入侵。Javascript:在字符串中查找斜槓(/)的索引

這是我的情況:我在我的瀏覽器中創建了一個包含JavaScript而不是URL鏈接的書籤。當我按下書籤時,我希望它打開一個具有相同URL的新窗口,但有一些額外的信息。 所以說我在上https://www.abcde.com/KnowYourABC,我按書籤,那麼它應該打開該鏈接的窗口:https://www.abcde.com.DoYou/KnowYourABC - 只是這是第3之前,所以「.DoYou」已插入‘/’

我有以下腳本:

javascript:(function(){ 
    var a=window, b=document, c=encodeURIComponent, 
    url = b.location, 
    d = a.open(url, "bkmk_popup", "left="+ 
    ((a.screenX||a.screenLeft)+50)+",top="+ 
    ((a.screenY||a.screenTop)+50)+ 
    ",height=600px, width=1200px, resizable=1, alwaysRaised=1"); 
    a.setTimeout(function(){d.focus()},300) 
})(); 

到目前爲止,它打開一個窗口具有相同的網址。但我似乎無法將網址分割爲第3個「/」。已盡力讓反斜槓的指數,以分裂的URL,並插入「.DoYou」

i = url.indexOf("//",9) 

但隨後的窗口將不會打開。請幫助我!

SOLUTION

javascript:(function(){ 
    var a=window; 
    b=document; 
    c=encodeURIComponent; 
    url = b.location; 
    var parts = window.location.href.split("/"); 
    parts[2] += ".DoYou"; 
    var newurl = parts.join("/"); 
    a.open(newurl, "bkmk_popup","left="+((a.screenX||a.screenLeft)+50)+",top="+((a.screenY||a.screenTop)+50)+",height=600px,width=1200px,resizable=1,alwaysRaised=1"); a.setTimeout(function(){d.focus()},300); 
})(); 
+0

您可能想要發佈未縮小的JavaScript代碼。 – 2012-03-05 14:13:16

+1

作爲參考,'/'是一個普通的斜槓。 '\\'是反斜槓。 – cHao 2012-03-05 14:14:48

+1

'/'只需要在正則表達式中轉義,其中變成''\ /''。在字符串'/'中是足夠的(它不會與任何東西衝突)。 – pimvdb 2012-03-05 14:16:54

回答

5

它可以用一個簡單的reg exp來完成,使用window.location對象的部分[host/search/etc]或簡單的拆分和連接。

這是簡單的拆分和連接解決方​​案。

var parts = window.location.href.split("/"); 
parts[2] += ".DOYOU"; 
var newStr = parts.join("/"); 
console.log(newStr); 
+2

這很有道理!謝謝你的幫助! – Norfeldt 2012-03-05 14:35:07

3

你不需要逃脫/(正斜槓)。

i = url.indexOf("/",9) 

P.S.轉義字符通常是反斜槓(\)。

+0

@Norfeldt:你的意思是「不起作用」。 '「https://www.abcde.com/KnowYourABC".indexOf("/」,9)=== 21' – 2012-03-05 14:19:06

+0

它不起作用。嘗試在您的瀏覽器(我使用鉻)與這段代碼做一個bookmak,你會發現它不會打開javascript :(函數(){var a = window,b = document,c = encodeURIComponent,url = b.location ,i = url.indexOf(「/」,9),d = a.open(url,「bkmk_popup」,「left =」+((a.screenX || a.screenLeft)+50)+「,top = 「+((a.screenY || a.screenTop)+50)+」,height = 600px,width = 1200px,resizable = 1,alwaysRaised = 1「); a.setTimeout(function(){d.focus() },300)})(); – Norfeldt 2012-03-05 14:19:51

+0

我認爲它不會打開,因爲索引方法不起作用 – Norfeldt 2012-03-05 14:21:49

0

以類似的方式來接受的答案,如果你並不真的需要找到索引,但想將東西靠近它,你可以用string.replace(replacedtext, newtext)和正則表達式。

爲了您的URL例如,如果你想與兩邊單詞字符的第一個斜槓前添加文本,你可以做

url = url.replace(/(\w(?=\/\w))/, '$1' + '.DoYou'); 

$1插入第一括號的子匹配字符串(請參閱here更多解釋的$)。

像你的問題,我希望做同樣的事情,除了在同一個窗口,所以我所做的:

javascript:void(location.href=location.href.replace(/(\w(?=\/\w))/,'$1'+'.DoYou')) 

有了這個作爲書籤讓我只需點擊書籤,帶我到我想要的頁面。