说我有此HTML页面:
<html>
<head>
<script type="text/javascript">
function echoValue(){
var e = document.getElementById("/path/$whatever");
if(e) {
alert(e.innerHTML);
}
else {
alert("not found\n");
}
}
</script>
</head>
<body>
<p id="/path/$whatever">The Value</p>
<button onclick="echoValue()">Tell me</button>
</body>
</html>
我将认为浏览器将那个ID字符串/path/$whatever
是简单的字符串。 实际上,它转换$
以它提供的呈现( $
)。
然而,JavaScript代码使用文本字符串$
搜索的元素。 因此,调用document.getElementById
失败,我从来没有拿到手就段落的价值。
有没有办法强制浏览器将使用给定的ID字符串字面意思?
编辑:
当然,我知道,我没有逃避$
。 但网页获取生成和发电机确实逸出。 所以,我不得不应付我的本钱。
在<p id="...">
时, $
序列被解释为$
,因为它出现在一个属性,被视为一个HTML实体。 这同样适用于所有其他元素属性。
在<script>
元素,HTML实体在所有不被解释,因此它的字面显示出来。
你可以尝试没有解码的jQuery JavaScript的文字:
<html>
<head>
<script type="text/javascript">
function decodeEntity(text){
text = text.replace(/<(.*?)>/g,''); // strip out all HTML tags, to prevent possible XSS
var div = document.createElement('div');
div.innerHTML = text;
return div.textContent?div.textContent:div.innerText;
}
function echoValue(){
var e = document.getElementById(decodeEntity("/path/$whatever"));
if(e) {
alert(e.innerHTML);
}
else {
alert("not found\n");
}
}
</script>
</head>
<body>
<p id="/path/$whatever">The Value</p>
<button onclick="echoValue()">Tell me</button>
</body>
</html>
的jsfiddle: http://jsfiddle.net/phTkC/
我建议你到HTML实体在JavaScript代码进行解码:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
function echoValue(){
var decoded_string = $('<div />').html("/path/$whatever").text();
var e = document.getElementById(decoded_string);
if(e) {
alert(e.innerHTML);
}
else {
alert("not found\n");
}
}
</script>
</head>
<body>
<p id="/path/$whatever">The Value</p>
<button onclick="echoValue()">Tell me</button>
</body>
</html>