8

问题

我正在尝试更改元素的内部 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 一条到$("#p_" + obj['code']),它没有工作,然后通过document.getElementById("p_" + obj['code'])它完美地工作。

似乎我在这里遗漏了一些明显的东西,但我仍然不明白为什么 jquery 在这种情况下不起作用!

问题

为什么普通的旧javascript可以正常工作,而jQuery却不能?

附加信息

1) jQuery 本身可以工作并且已正确加载。不存在冲突:成功发送 ajax 调用并正确接收到答案,

2)收到的ID存在且唯一

3)我不热衷于jQuery html() 方法,但我遵循了文档,它应该可以像我使用它一样工作

系统信息

使用 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

4 回答 4

9

如果您的 idp_x.xx.xxx$('#' + id)意味着:具有 idp_x和 classes的元素xxxxx.

\\.在使用字符串作为 id 或使用 @dystroy 建议的方法之前替换点。

于 2013-07-01T11:55:42.020 回答
4

当您想使用任意字符串作为 ID 选择元素时,最好避免使用'#'+yourstring选择器:在许多情况下,即使您的字符串是有效的 HTML5 id,这也会使选择器对 jQuery 无效。

如果你的 id 包含一个点,jQuery 会将它解释为一个类的开始。

喜欢这个:

$(document.getElementById(yourstring))
于 2013-07-01T11:43:15.760 回答
3
$("[id='p_"+code+"']")

这也将起作用。它包含 id 字符串中的句点。

于 2013-07-01T11:52:25.843 回答
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/

于 2013-07-01T11:48:14.787 回答