0

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

我有一个包含多个 textarea 的表单,每个都有一个像 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

4 回答 4

8

你的身份证上有一个点。这被解释为一个类选择器

#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");
于 2009-09-23T15:11:15.003 回答
1

你必须小心在你的 ID 中转义奇怪的字符。有关更多信息,请参阅jQuery 常见问题解答

于 2009-09-23T16:26:01.463 回答
0

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

于 2009-09-23T15:11:22.633 回答
0

尝试:

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

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

于 2009-09-23T15:13:36.967 回答