有人可以解释为什么这个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专家:-(所以一个基本的解释是我真的很感激。
答案 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");
您没有像帖子中的示例那样构建选择器,这就是它失败的原因。这个解决方案你只做一次选择。