我正在尝试更改元素的内部HTML值。我没有真正使用过jQuery,而且我在功能的许多方面仍然是新手。
$('a.toggle-download').live('click', function (event) {
$.post("/ajax/toggle-download", { code: $(this).data("document"), prev_value: $(this).data("val") })
.done(function(data) {
var json = data,
obj = JSON && JSON.parse(json) || $.parseJSON(json);
if(obj['return'] == 1){
//document.getElementById("p_" + obj['code']).innerHTML = 'some text';
$("#p_" + obj['code']).html('some text');
}
});
event.preventDefault();
});
我已尝试过这两行,首先是jQuery one $("#p_" + obj['code'])
,但是没有效果,然后通过document.getElementById("p_" + obj['code'])
完美无缺。
似乎我在这里遗漏了一些明显的东西,但我仍然不明白为什么jquery在这种情况下不起作用!
为什么普通的旧javascript工作正常,当jQuery没有?
1)jQuery本身可以正常加载。不存在冲突:成功发送ajax呼叫并正确接收答案,
2)收到的ID存在且唯一
3)我并不热衷于jQuery html() method,但我遵循了文档,它应该像我使用它一样工作
使用Chrome 27.0.1453.116 m时出现此问题。我没有用其他版本或其他浏览器测试它,但我很确定这是一个jQuery问题而不是浏览器问题。另外,我在apache上使用php 5.3,但这些信息再次与问题无关。
如果我错过了一些您需要更好地了解我的问题的信息,请在评论中告诉我,我会尽快回答您的问题。另外,请原谅我的坏语法,但我不是母语为英语的人。
根据要求,这是ajax响应的示例:
{"return":1,"code":"5.43.321"}
命令console.log($("#p_" + obj['code']).length)
产生“0”
答案 0 :(得分:8)
如果您的ID为p_x.xx.xxx
,则$('#' + id)
表示:标识为p_x
且类xx
和xxx
的元素。
在使用字符串作为id ore之前,用\\.
替换点,使用@dystroy建议的方法。
答案 1 :(得分:4)
如果要使用任意字符串作为ID选择元素,最好避免使用'#'+yourstring
选择器:在许多情况下,即使字符串是有效的HTML5,这也会使选择器对jQuery无效标识。
如果你的id包含一个点,jQuery会把它解释为一个类的开头。
首选:
$(document.getElementById(yourstring))
答案 2 :(得分:3)
$("[id='p_"+code+"']")
这也有效。它包含id字符串中的句点。
答案 3 :(得分:2)
这实际上对我有用......
<div id="p_testdiv1"></div>
var obj = { code : 'testdiv1' }
console.log(obj.code);
//document.getElementById("p_" + obj.code).innerHTML = "test"; // Also works
$("#p_" + obj.code).html("test1"); // Displays "test1" in the div