现在我的应用程序提供了某些功能,包括浏览html以获取特定输入。那些输入具有基于用户提供的一些信息的id。因此,如果在,我们称之为input1
,用户给我们“第一个”,我们将拥有
<input id="first">
在html的某个地方。
后来javascript需要只根据“first”字符串找到这个输入,使用jquery和coffeescript相当容易:
query = "first"
$("#" + query)
像魅力一样!
当query
由两个单词组成时,问题就开始了,比如“第一次输入”。不幸的是,这次我提供的代码无法正常工作。我该怎么做才能改善它?
答案 0 :(得分:4)
id
values不能包含空格,因此您不能拥有input
id
的{{1}},这是无效的HTML。这几乎是HTML对"first input"
值施加的唯一规则。 (CSS imposes more除非您使用转义。)
由于它无效,浏览器可以自由地做它喜欢的东西 - 它只能使用第一个单词而忽略第二个单词,它可以使用整个东西,它可以完全抛弃id
等等。
实际上,Chrome至少允许使用无效ID,您可以使用属性选择器来匹配它:Live Example
id
注意值周围的引号,因为空间需要它们。
但同样,这些// Don't do this, even if it works in some browsers
var query = "first input";
$("[id='" + query + "']");
值无效,浏览器没有义务正确处理它们。您可以考虑用破折号替换空格,例如id
。
答案 1 :(得分:0)
这很简单,使用属性选择器:
<input id="first second">
使用Javascript:
var query = "first second";
alert($("[id='" + query + "']"));
工作小提琴(已更新)here
答案 2 :(得分:0)
该问题是由jquery命名规则引起的。 “$("#first query")
”无法识别。您可以使用“_”替换单词之间的空格。
严格来说,$("#first query")
可以被识别,但它获取id为first的标记,tag是“query”。无论如何,它几乎找不到。