2012-02-27 62 views
0

有關在html內部放置xml元素的問題是什麼?我試圖輕鬆地檢索javascript事件信息,當單擊div時返回一些html。我想解析(如我不能發送任何數據AFAIK對象)和它很容易,所以我做xml內部html

<a href="#" onClick="doTap(this); return false;"><div><currency>eur</currency><price>120</price><weight>2kg</weight></div></a> 

,並在js即時通訊做

doTap=function(sent) {  

     console.log(sent.getElementsByTagName('price')[0].innerHTML); 
+3

問題是XML不是有效的HTML(關於元素)。看起來你很好,使用'span'元素並給他們上課。 – 2012-02-27 13:31:38

+0

@FelixKling - 您應該將其擴展爲答案:) – Quentin 2012-02-27 13:33:29

回答

2

的問題是,XML是無效的HTML(關於元素)。瀏覽器不知道如何呈現currency元素,而且afaik沒有處理未知元素的標準方法。有些瀏覽器可能完全忽略它們。

你應該罰款使用span元素並賦予其類:

<div> 
    <span class="currency">eur</span> 
    <span class="price">120</span>< 
    <span class="weight">2kg</span> 
</div> 

a元素不應該包含塊元素BTW。

然後get the element in question by its class


如果您不希望顯示的信息(貨幣,價格等),但只需要存儲在某個地方,你可以使用HTML5的data-* attributes

<a data-currency-"eur" ... ></a> 

,並與getAttribute訪問它們。

+0

特別是,在IE8中可能會發生真正奇怪的事情。例如,帶有「塊」顯示的未知元素(有時候總是?)不會隱式關閉標籤,結果非常奇怪。 – Pointy 2012-02-27 13:40:51

0

主要的實際問題是,IE 8和舊版本在處理HTML文檔時根本不處理他們不知道的標籤。爲了解決這個問題,你可以添加如document.createElement('currency')這樣的代碼。

還有其他問題,例如未來某些瀏覽器開始識別您發明的標記的風險 - 這可能會導致不可預知的呈現功能和功能。更多備註:http://www.cs.tut.fi/~jkorpela/pragmatic-html.html8#custom

更安全的方法是使用span元素與class。您還可以使用a元素,因爲如果沒有href,它們仍然有效,但不會創建鏈接,從而使該元素僅作爲文本級容器。但是,通過HTML語法規則,您不能嵌套a元素(但瀏覽器不在意,就像這樣)。

因此,最安全的方法使用例如<span class=currency>EUR</span>等。

+0

我很高興使用跨度,但我不知道如何輕鬆獲取數據,這就是爲什麼我嘗試使用XML。在這種情況下,我並沒有試圖獲得DOM的元素,它是由onClick引發的事件。 – landed 2012-02-27 14:23:55

+0

在課堂上使用'span'時,它會變得稍微複雜一些。獲取所有'span'元素,然後選擇合適的類。而且無論如何你都需要DOM - 即使'getElementsByTagName'依賴於DOM。 – 2012-02-27 15:15:46

+0

這是我的觀點我不想使用DOM這就是爲什麼我使用XML!我正在處理通過onClick發送的事件,其中afaik是我的一小段HTML,因此是原始DOM的一部分。或者這不是它的工作原理。我知道這對很多人來說一定是個問題。我正在使用html5,這可能意味着上面給出的標籤解決方案。但是,這將工作在非DOM的HTML。 – landed 2012-02-27 17:57:22