2013-02-14 88 views
0

我試圖用pageload上的計算URL替換一些空的href=""語句。如何替換href url而不用全部&替換爲&

然而,替換字符串包含若干& amp,它們需要位於href中。

什麼都我嘗試,只要setAttribute("href", url);$(id).attr('href', url)時,所有&放的是由&代替,鏈接失敗。

我該如何防止這種情況發生?我敢肯定,以.href結尾或包含href的任何代碼正在經歷翻譯階段,並且都將失敗。

您可能已經注意到我編輯過這個消息很多次了,因爲您無法輸入完整的'& a m p;'在這個盒子裏沒有被翻譯成'&'。

+0

如何獲得'url'變量? – 2013-02-14 01:03:03

+0

無關緊要,它始終是一個字符串,只要有一個&,它就會被翻譯。如果直接將相同的字符串粘貼到href =「」中,則沒有問題。 – Avan 2013-02-14 01:17:12

+0

如果您使用* scripting *將'&amp'寫入屬性,那麼它將在屬性值* verbatim *中。 *這就是鏈接失敗的原因。另見Gareth的出色答案。 – PointedEars 2013-02-14 09:34:36

回答

0

你必須在url與&更換&,之前設置的a標籤的href財產。

var url = 'www.example.com?a=1&b=2' 
url = url.replace(/\&/g, '&') 
$('a').attr('href', url) 
+0

不,該字符串已經有&,並且一旦調用任何href函數,它們就會丟失。只需調用$('a')。attr('href',url)就可以從href =「...」的結果中刪除&amps。 – Avan 2013-02-14 01:21:59

+0

這是相反的方式,因爲*腳本不是HTML *。 – PointedEars 2013-02-14 09:38:28

2

讓我們退一步,從頭開始思考這個問題。轉義序列&xxx;是將「特殊字符」嵌入到HTML文檔中的方式。要清楚,它是一個HTML轉義序列。

這種轉義字符的方式非常有用,因爲這意味着字符可以放置在ASCII文件中,否則將無法嵌入。

例如,可以使用代表其Unicode編碼點€的數字代碼嵌入歐元符號()。或者,可以使用其字符實體名稱 來嵌入非破壞空間。 (另外:這些字符可以更容易嵌入到UTF-8文件中,不需要轉義,但這裏就不重要了)

現在,因爲這個轉義序列始終以&符開頭,這意味着一個裸HTML文檔中的&符號是不明確的 - 當瀏覽器讀取文檔時,它不知道是否需要實際符號或是否有HTML實體轉義序列出現。要消除這種不明確性,如果您想要在HTML文檔中嵌入&符號,則需要將其轉義。

我要強調的那句話:要消除此不明確,如果你想要一個HTML文檔,那麼你需要逃避它嵌入一個符號

因爲這個轉義只適用於HTML文檔,所以如果你正在編寫.js文件中的Javascript,那麼這個轉義序列與你無關。你可以放棄你的&符號而沒有任何問題。它的意思是,你的Javascript文件可以用純和符號代替URL,不需要&

就瀏覽器而言,您編寫的所有URL只包含裸號。轉義序列&只需要表示HTML格式,只要瀏覽器讀取HTML然後該轉義序列被遺忘。

我在這裏重複了幾次自己,但那是因爲我試圖讓它儘可能清晰。

+0

但這是HTLM href需要傳遞給&amps!但我需要動態網址,因此無法嵌入固定的hrefs。 – Avan 2013-02-14 01:59:57

+0

@Avan冷靜思考。您不在此處編寫HTML代碼。在最簡單的情況下,您正在設置對象的字符串屬性。 – PointedEars 2013-02-14 09:41:19

+0

看起來的確替換不是這裏的罪魁禍首。我同時有另一個問題,它看起來像字符串是造成這個問題。我在url-builder中替換了&的常規符號,現在它完美地工作。 – Avan 2013-02-14 11:31:33