变量中的jquery选择器

时间:2009-09-23 15:07:16

标签: jquery variables selector

有人可以解释为什么这个jquery选择器不起作用,我已经解决了这个问题,但我的理智是想知道我有什么问题

我有一个包含多个textareas的表单,每个表单都有一个像f_id_DSC000001.JPG的ID,其中最后一部分是照片编号,textarea有一个onblur事件,它使用post发送其内容并更新数据库表,json响应回来。所有这一切都很好,我可以使用Firebug看到结果,那里没有问题。

id的DSC000001.JPG部分在json响应中作为确认传回,然后我想更改textarea的类以显示更新的状态。

当我这样做时

var textarea_selector="#f_id_"+res_data.image_filename;
$(textarea_selector).removeClass("kw-class");
$(textarea_selector).addClass("update-failed");

班级不会改变,但如果我这样做

$("textarea[id*='"+res_data.image_filename+"']").removeClass("kw-class");
                  $("textarea[id*='"+res_data.image_filename+"']").addClass("update-done");

它工作正常。

我不是javascript / jquery专家:-(所以一个基本的解释是我真的很感激。

4 个答案:

答案 0 :(得分:8)

您的身份证上有一个点。这被解释为class selector

#f_id_DSC000001.JPG
\_____________/\__/
 id             class

但这应该有效:

var textarea_element = document.getElementById("f_id_"+res_data.image_filename);
$(textarea_element).removeClass("kw-class").addClass("update-failed");

或者这个:

var textarea_id = "f_id_"+res_data.image_filename;
$("[id="+textarea_id+"]").removeClass("kw-class").addClass("update-failed");

答案 1 :(得分:1)

您必须小心转义ID中的奇怪字符。有关详情,请参阅the jQuery FAQ

答案 2 :(得分:0)

看起来你正在调用两个不同的ID。为什么在第一个例子中附加“#f_id”?你应该能够将'#'附加到元素的id并选择它就好了。

答案 3 :(得分:0)

尝试:

var textarea = $("textarea[id*='"+res_data.image_filename+"']");
textarea.removeClass("kw-class");
textarea.addClass("update-failed");

您没有像帖子中的示例那样构建选择器,这就是它失败的原因。这个解决方案你只做一次选择。