Reputation: 4987
I had to rename a CSS class that used to start with a #
sign to a dot so it could be handled by the ExtJS
framework properly.
That jQuery script used to work fine until I made that change, now it whines it cannot find the element.
I'm not very used to jQuery, my question is is this supposed to work?
$('.x-panel-body-cssmenu li.has-sub>a').on('click', function(){
//some code that errors out because .x-panel-body-cssmenu can't be found apparently...
});
This is the HTML in question:
<div class="x-panel x-border-item x-box-item x-panel-cssmenu" style="height: 441px; right: auto; left: 0px; top: 100px; margin: 0px; width: 200px;" id="navigationmenu-1011">
<div id="navigationmenu-1011-body" class="x-panel-body x-panel-body-cssmenu x-layout-fit x-panel-body-cssmenu" style="height: 441px; left: 0px; top: 0px; width: 200px;">
<ul>
<li class="active"><a href="#"><span>Home</span></a></li>
<li class="has-sub"><a href="#"><span>Eligibility list</span></a>
<ul>
<li><a href="#"><span>View/manage list</span></a></li>
<li><a href="#"><span>Add employee</span></a></li>
</ul>
</li>
<li><a href="#"><span>Cases</span></a></li>
<li class="last"><a href="#"><span>Documents</span></a></li>
</ul>
</div>
</div>
And the CSS (.x-panel-body-cssmenu
used to be called #cssmenu
:
.x-panel-body-cssmenu,
.x-panel-body-cssmenu ul,
.x-panel-body-cssmenu ul li,
.x-panel-body-cssmenu ul li a {
margin: 0;
padding: 0;
border: 0;
list-style: none;
line-height: 1;
display: block;
position: relative;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.x-panel-body-cssmenu {
width: 200px;
font-family: Helvetica, Arial, sans-serif;
color: #ffffff;
float: left;
}
.x-panel-body-cssmenu ul ul {
display: none;
}
.align-right {
float: right;
}
.x-panel-body-cssmenu > ul > li > a {
padding: 15px 20px;
border-left: 1px solid #1682ba;
border-right: 1px solid #1682ba;
border-top: 1px solid #1682ba;
cursor: pointer;
z-index: 2;
font-size: 14px;
font-weight: bold;
text-decoration: none;
color: #ffffff;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.35);
background: #36aae7;
background: -webkit-linear-gradient(#36aae7, #1fa0e4);
background: -moz-linear-gradient(#36aae7, #1fa0e4);
background: -o-linear-gradient(#36aae7, #1fa0e4);
background: -ms-linear-gradient(#36aae7, #1fa0e4);
background: linear-gradient(#36aae7, #1fa0e4);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.x-panel-body-cssmenu > ul > li > a:hover,
.x-panel-body-cssmenu > ul > li.active > a,
.x-panel-body-cssmenu > ul > li.open > a {
color: #eeeeee;
background: #1fa0e4;
background: -webkit-linear-gradient(#1fa0e4, #1992d1);
background: -moz-linear-gradient(#1fa0e4, #1992d1);
background: -o-linear-gradient(#1fa0e4, #1992d1);
background: -ms-linear-gradient(#1fa0e4, #1992d1);
background: linear-gradient(#1fa0e4, #1992d1);
}
.x-panel-body-cssmenu > ul > li.open > a {
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.15);
border-bottom: 1px solid #1682ba;
}
.x-panel-body-cssmenu > ul > li:last-child > a,
.x-panel-body-cssmenu > ul > li.last > a {
border-bottom: 1px solid #1682ba;
}
.holder {
width: 0;
height: 0;
position: absolute;
top: 0;
right: 0;
}
.holder::after,
.holder::before {
display: block;
position: absolute;
content: '';
width: 6px;
height: 6px;
right: 20px;
z-index: 10;
-webkit-transform: rotate(-135deg);
-moz-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
-o-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.holder::after {
top: 17px;
border-top: 2px solid #ffffff;
border-left: 2px solid #ffffff;
}
.x-panel-body-cssmenu > ul > li > a:hover > span::after,
.x-panel-body-cssmenu > ul > li.active > a > span::after,
.x-panel-body-cssmenu > ul > li.open > a > span::after {
border-color: #eeeeee;
}
.holder::before {
top: 18px;
border-top: 2px solid;
border-left: 2px solid;
border-top-color: inherit;
border-left-color: inherit;
}
.x-panel-body-cssmenu ul ul li a {
cursor: pointer;
border-bottom: 1px solid #32373e;
border-left: 1px solid #32373e;
border-right: 1px solid #32373e;
padding: 10px 20px;
z-index: 1;
text-decoration: none;
font-size: 13px;
color: #eeeeee;
background: #49505a;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.x-panel-body-cssmenu ul ul li:hover > a,
.x-panel-body-cssmenu ul ul li.open > a,
.x-panel-body-cssmenu ul ul li.active > a {
background: #424852;
color: #ffffff;
}
.x-panel-body-cssmenu ul ul li:first-child > a {
box-shadow: none;
}
.x-panel-body-cssmenu ul ul ul li:first-child > a {
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.x-panel-body-cssmenu ul ul ul li a {
padding-left: 30px;
}
.x-panel-body-cssmenu > ul > li > ul > li:last-child > a,
.x-panel-body-cssmenu > ul > li > ul > li.last > a {
border-bottom: 0;
}
.x-panel-body-cssmenu > ul > li > ul > li.open:last-child > a,
.x-panel-body-cssmenu > ul > li > ul > li.last.open > a {
border-bottom: 1px solid #32373e;
}
.x-panel-body-cssmenu > ul > li > ul > li.open:last-child > ul > li:last-child > a {
border-bottom: 0;
}
.x-panel-body-cssmenu ul ul li.has-sub > a::after {
display: block;
position: absolute;
content: '';
width: 5px;
height: 5px;
right: 20px;
z-index: 10;
top: 11.5px;
border-top: 2px solid #eeeeee;
border-left: 2px solid #eeeeee;
-webkit-transform: rotate(-135deg);
-moz-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
-o-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.x-panel-body-cssmenu ul ul li.active > a::after,
.x-panel-body-cssmenu ul ul li.open > a::after,
.x-panel-body-cssmenu ul ul li > a:hover::after {
border-color: #ffffff;
}
I tried escaping the dot, no dot, using a pound sign anyways, no go.
Any ideas ?
Upvotes: 1
Views: 912
Reputation: 943922
NB: This answers the original question. The question has been since edited to show code with which there doesn't appear to be any problem at all.
In general, you should avoid using special characters in class names at all. They are more trouble then they are worth.
However, if you are stuck with a class name containing a special character, you can escape it.
You also have an additional problem is that you need to prefix the class name with a .
in a selector to indicate that you are using a class selector:
In your selector:
.\.x-panel-body-cssmenu
Note that since you are putting your selector in a JavaScript string literal, and \
is a special character there, you need to escape the \
".\\.x-panel-body-cssmenu"
NB: There is no such thing as a CSS class. HTML has classes, CSS has class selectors.
Upvotes: 3