当元素在标记名称中包含点时,Jquery选择器不工作

Kev*_*inn 33 javascript model-view-controller jquery-selectors

我刚开始第一次使用jquery,所以我不确定我所做的是否正确.我正在尝试做的是非常基本的,我有一个脚本,它在MVC视图中加载时向文本框添加css水印.

要选择元素,请执行以下操作:

jQuery(document).ready(function(){$('#Department.DeptName').addWatermark('input-watermarked', 'test');});
Run Code Online (Sandbox Code Playgroud)

然后在我的脚本中添加css水印类,它在"this.val().length"语句中失败.

jQuery.fn.toggleWatermark = function(watermarkedClass, watermarkText) {
if (this.hasClass(watermarkedClass)) {
    this.removeWatermark(watermarkedClass);
}
else if (this.val().length == 0) {
    this.addClass(watermarkedClass);
    this.val(watermarkText);
}
Run Code Online (Sandbox Code Playgroud)

}

该脚本在元素id为"DepartmentDeptName"时工作正常,就好像当元素id在其中包含一个点时,选择器不起作用.有谁知道为什么或如何解决这个问题?

Jor*_*ril 65

我认为你应该用双反斜杠来逃避这一点:$("#Department\\.DeptName")这里.

  • 正如Joril所说,可以使用两个反斜杠来完成点的转移.将点作为文字处理的另一种方法是相关但不适合这个问题(因此,我将其作为注释发布):如果违规选择位是属性选择器而不是类或ID,可以用引号将整个东西包装起来作为文字处理:`$("input [name = department.deptname]")`不起作用,但是`$("input [name ='department.deptname']" )``. (15认同)