2012-06-17 48 views
4

我需要爲每個鏈接顯示動態的一些文本與Java腳本(jQuery)。問題在於文本也被格式化爲HTML,所以這在後面的視圖中會導致一些問題。 現在我將它存儲在ID屬性中,這是有效的,但是隻有嵌入HTML。如何在ID屬性中存儲HTML標記?

<?php 
... 
$desc = '<p style="color: red">some <span>data</span></p>'; 
echo '<a href="#" id="' . $desc . '">' . $key . '</a>'; 
?> 

Ajax請求是不允許的。有沒有簡單的方法來達到這個目標?

+2

答案很簡單:不要這樣做。 HTML標記包含大量不允許在ID中使用的內容。 – ThiefMaster

+1

這是嚴重濫用「id」屬性 – sczizzo

回答

13

id屬性是最不合適的地方之一(必須是唯一的,不能包含所有字符)。使用data-屬性(在HTML5推出,但也能在舊的瀏覽器和不使用HTML5文檔類型),而不是:

<a href="#" data-desc="...."> 

如果你使用jQuery,您可以通過.data('desc')訪問它,在普通的JavaScript的最簡便的方式是使用.getAttribute('data-desc')。如果您不需要支持舊版瀏覽器,則可以通過.dataset.desc屬性訪問該值。

在任何情況下,您都需要確保在屬性中插入動態數據時不會出現任何中斷。爲此目的使用htmlspecialchars()

$desc = '<p style="color: red">some <span>data</span></p>'; 
echo '<a href="#" data-desc="' . htmlspecialchars($desc) . '">' . $key . '</a>'; 
+0

+1。 ''body onload =「...」>'我認爲它更糟糕......':)' – gdoron

+0

唯一的小問題可能是他需要驗證HTML5以下 – ChrisW

+0

這是一個人爲的問題。例如,添加Facebook OpenGraph標籤也會導致您的HTML無效。 – ThiefMaster

1

其他評論是絕對正確的。不要這樣做。在id屬性中放置某種標識符是不合適的。

這就是說,我想我會讓你知道你的代碼爲什麼失敗。在嘗試按照您的意圖使用它之前,您需要對數據使用htmlspecialchars()。這樣,HTML不會被解釋爲HTML ...所有的HTML實體都將被轉換爲,所以你的屬性值被解釋爲文本。 <變成&lt;,>變成&gt;等。如果您稍後將值拉出(使用jQuery或其他),您將獲得預期的文本。