2012-02-27 36 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