jQuery $(“#”+ x)不起作用,但document.getElementById(x)有效

时间:2013-07-01 11:39:58

标签: javascript jquery

问题

我正在尝试更改元素的内部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”

4 个答案:

答案 0 :(得分:8)

如果您的ID为p_x.xx.xxx,则$('#' + id)表示:标识为p_x且类xxxxx的元素。

在使用字符串作为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

http://jsfiddle.net/hZ4yz/