首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带加号的jQuery

问带加号的jQuery
EN

Stack Overflow用户
提问于 2015-05-11 22:19:03
回答 3查看 3.2K关注 0票数 5

我想知道为什么jQuery不允许"+“符号。下面是一个示例,说明它如何与"1“和"3”一起工作,而不是与"2+“一起工作。只需鼠标移动到每一个div上方的文字上。

代码语言:javascript
复制
<div id="div-2+"></div>

JSFiddle

​

代码语言:javascript
复制
$('a.hover').mouseover(function() {

    dataI = $(this).data('i');

	$('div#div-' + dataI).addClass('h');

});

$('a.hover').mouseout(function() {

    dataI = $(this).data('i');

	$('div#div-' + dataI).removeClass('h');

});
代码语言:javascript
复制
a {
    display: inline-block;
    width: 100px;
    margin: 60px 20px 60px 0;
    text-align: center;
}

div {
    display: inline-block;
    width: 100px;
    height: 100px;
    margin-right: 20px;
    background-color: #ddd;
}

div.h {
    background-color: #f00;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="hover" data-i="1">DIV 1</a>

<a class="hover" data-i="2+">DIV 2+</a>

<a class="hover" data-i="3">DIV 3</a>

<br />

<div id="div-1"></div>

<div id="div-2+"></div>

<div id="div-3"></div>

​

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-11 22:25:58

很可能是因为加号是相邻的CSS选择器。,这会导致Sizzle选择器库jQuery使用它来假设您是指相邻的选择器。

避免这种情况的一种方法是使用属性选择器,它选择id属性。尽管许多人会认为在id中加个加号是个坏主意。

工作实例:

​

代码语言:javascript
复制
$('a.hover').mouseover(function() {

    dataI = $(this).data('i');

	$('div[id="div-' + dataI + '"]').addClass('h');

});

$('a.hover').mouseout(function() {

    dataI = $(this).data('i');

	$('div[id="div-' + dataI + '"]').removeClass('h');

});
代码语言:javascript
复制
a {
    display: inline-block;
    width: 100px;
    margin: 60px 20px 60px 0;
    text-align: center;
}

div {
    display: inline-block;
    width: 100px;
    height: 100px;
    margin-right: 20px;
    background-color: #ddd;
}

div.h {
    background-color: #f00;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="hover" data-i="1">DIV 1</a>

<a class="hover" data-i="2+">DIV 2+</a>

<a class="hover" data-i="3">DIV 3</a>

<br />

<div id="div-1"></div>

<div id="div-2+"></div>

<div id="div-3"></div>

​

票数 10
EN

Stack Overflow用户

发布于 2015-05-11 22:40:34

注:“解决办法”

试着利用css

​

代码语言:javascript
复制
a {
  display: inline-block;
  width: 100px;
  margin: 60px 20px 60px 0;
  text-align: center;
}

div {
  display: inline-block;
  width: 100px;
  height: 100px;
  margin-right: 20px;
  background-color: #ddd;
}

a.hover[data-i="1"]:hover ~ div[id$="1"],
a.hover[data-i="2+"]:hover ~ div[id$="2+"],
a.hover[data-i="3"]:hover ~ div[id$="3"] {
  background-color: #f00;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<a class="hover" data-i="1">DIV 1</a>

<a class="hover" data-i="2+">DIV 2+</a>

<a class="hover" data-i="3">DIV 3</a>

<br />

<div id="div-1" class="hover"></div>

<div id="div-2+" class="hover"></div>

<div id="div-3" class="hover"></div>

​

票数 2
EN

Stack Overflow用户

发布于 2015-05-11 22:59:36

@Alexander‘’Mara很好地解释了为什么它不起作用,并展示了一个体面的工作-周旋。

另一个解决办法是在加号前面加上一个反斜杠,以避开加号。

代码语言:javascript
复制
dataI = dataI.replace('+', '\\+');

小提琴

来自选择器的jQuery文档

若要使用任何元字符(如!"#$%&'()*+,./:;<=>?@[]^`{|}~ )作为名称的字面部分,必须使用两个反斜杠:\\对其进行转义。例如,带有id="foo.bar"的元素可以使用选择器$("#foo\\.bar")。W3C CSS规范包含有关有效CSS选择器的完整规则集。Mathias在标识符的CSS字符转义序列上的博客文章也很有用。

还请注意,当给定选择器document.querySelector()时,#div-2+将引发以下错误

代码语言:javascript
复制
SyntaxError: An invalid or illegal string was specified.

小提琴

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30178562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档