Jquery没有在DOM中找到id

时间:2015-07-06 21:18:01

标签: javascript jquery

我有一个 的 HTML

<h3 id="tourName_ROCK.ROCK"></h3>
<h3 id="tourName_MOBT.MOBT"></h3> 

JSON

dataTourBase :{
"list":[{
      "code" : "ROCK.ROCK",
      "name" : "Laugher Bins"
},
{
      "code" : "MOBT.MOBT",
      "name" : "Laugher Bins"
}]

在我的Jquery代码中,我想附加匹配的代码及其名称。但问题是我的DOM无法找到id,因为“。” (DOT)oprator

我这样做:

jQuery.each(dataTourBase.list, function(i, excursion) {
    $("#" + "tourName_" + excursion.code).html(excursion.name);
}

请建议,我如何在DOM中找到我的id。 提前致谢

3 个答案:

答案 0 :(得分:4)

CSS选择器。你在做什么:

$('#tourName_ROCK.ROCK');

Javascript正在解释为&#34; ID为tourName_ROCK的元素和CSS选择器ROCK,例如

<div id="tourname_ROCK" class="ROCK">

会匹配。

换句话说,请勿在{{1​​}}或.名称中使用id

答案 1 :(得分:3)

你有两种选择,第一种是最好的 - 以我自己的拙见 - 从.的元素中删除id个字符;将其替换为允许的字符,例如-_

否则,你必须使用String.prototype.replace()`来转义字符串中的.个字符:

jQuery.each(dataTourBase.list, function(i, excursion) {
    $("#" + "tourName_" + excursion.code.replace(/\./g,'\\.').html(excursion.name);
}

附加代码:

replace(/\./g, '\\.')

匹配所有文字.字符,首先使用反斜杠转义它(因为句点是正则表达式中的特殊字符),并用两个反斜杠后跟一个句点替换该句点;第一个反斜杠转义第二个反斜杠,&amp; ndash在jQuery选择器&amp; ndash中使用时将其转义为句点,因此它被视为“文字”句点,而不是将以下字符串标识为类名。

但是,老实说,避免问题比编码周围更容易。

参考文献:

答案 2 :(得分:2)

我不是说你应该这样做,因为我会从id名称中获取句号,但这将与游览代码中的'。'一起使用:

$('[id="tourName_' + excursion.code + '"]');

http://jsfiddle.net/blaird/e3cxo97q/