通过JavaScript获取HTML属性值

时间:2015-11-16 22:41:47

标签: javascript html dom

我有一个网站,我通过元标记将信息提供给分析引擎:

<meta property="analytics-track" content="Hey&nbsp;There!">

我正在尝试编写一个JavaScript脚本(没有库)来访问内容部分并按原样检索信息。本质上,它应该包含HTML实体,而不是转换/剥离它。

原因是我使用PhantomJS来检查哪些页面在元数据中有HTML实体,并在它们搞砸我的分析数据时删除它们(例如,我将包含同时包含Hey There!Hey&nbsp;There!实际上它们都是同一页面,因此不应该有两个单独的数据点。)

我最简单的JS格式是:

document.getElementsByTagName('meta')[4].getAttribute("content")

当我在控制台上检查它时,它会以下列格式返回文本:

"Hey There!"

我希望它返回的是:

"Hey&nbsp;There!"

如何确保返回的数据将保留HTML实体。如果那是不可能的,有没有办法通过JavaScript检测HTML实体。我试过了:

document.getElementsByTagName('meta')[4].getAttribute("content").includes('&nbsp;')

但它返回false

3 个答案:

答案 0 :(得分:4)

使用queryselector选择具有属性值&#34; analytics-track&#34;,outerHTML的元素以将元素作为String并匹配以使用Regex选择内容属性的未解析值。

document.querySelector('[property=analytics-track]').outerHTML.match(/content="(.*)"/)[1];

请参阅http://jsfiddle.net/sjmcpherso/mz63fnjg/

答案 1 :(得分:2)

你不能,&nbsp;并不存在。它只是一个不间断空间的编码。对于文档,DOM,网页,对所有内容,它看起来像:

Hey There!

yT之间的字符不是通过点击空格键获得的那种空格,而是一个完全不同的字符。

Observe

<span id='a' data-a='Hey&nbsp;There!'></span>
<span id='a1' data-a='Hey&nbsp;There!'></span>
<span id='b' data-b='Hey There!'></span>

var a = document.getElementById('a').getAttribute('data-a')
var a1 = document.getElementById('a1').getAttribute('data-a')
var b = document.getElementById('b').getAttribute('data-b')
console.log(a,b,a==b)
console.log(a,a1,a==a1)

给出:

Hey There! Hey There! false
Hey There! Hey There! true

相反,请考虑将您的“平等”方法改为view a space and a non-breaking space as equal

var re = '/(\xC2\xA0/|&nbsp;)';
x = x.replace(re, ' ');

答案 2 :(得分:1)

要按原样获取元标记的HTML,请使用outerHTML

document.getElementsByTagName('meta')[4].outerHTML

工作代码段:

&#13;
&#13;
console.log(document.getElementsByTagName('meta')[0].outerHTML);
&#13;
<meta property="analytics-track" content="Hey&nbsp;There!">
<h3>Check your console</h3>
&#13;
&#13;
&#13;

Element.outerHTML - Web APIs | MDN

更新1:

要过滤掉元内容,请使用以下内容:

metaInfo.match(/content="(.*)">/)[1];  // assuming that content attribute is always at the end of the meta tag

工作代码段:

&#13;
&#13;
var metaInfo = document.getElementsByTagName('meta')[0].outerHTML;

console.log(metaInfo);

console.log('Meta Content = ' + metaInfo.match(/content="(.*)">/)[1]);
&#13;
<meta property="analytics-track" content="Hey&nbsp;There!">
<h3>Check your console</h3>
&#13;
&#13;
&#13;