JavaScript函数到';按父类获取元素';分配
我的困境相当简单:此函数基于JavaScript函数到';按父类获取元素';分配,javascript,html,css,Javascript,Html,Css,我的困境相当简单:此函数基于的父id获取“This”的id元素。它以前工作得很好,但现在已经不行了,我要么需要使用类而不是id,同时仍然能够将'current'的id分配给当前元素,要么更改css 函数myFunction(元素){ liArray=document.getElementById(“leftlist”).childNodes; i=0; 而(雷[i]){ liArray[i].id=“”; i++; } element.id=“current”//还是element.class
的父id
获取“This”的id
元素。它以前工作得很好,但现在已经不行了,我要么需要使用
类而不是id
,同时仍然能够将'current'的id
分配给当前元素,要么更改css
函数myFunction(元素){
liArray=document.getElementById(“leftlist”).childNodes;
i=0;
而(雷[i]){
liArray[i].id=“”;
i++;
}
element.id=“current”//还是element.className?
}
ul#左列表{
背景色:rgb(205,205,205);
}
ul#左列表李#当前a{
颜色:rgb(96176255);
背景色:218218218);
}
ul#左列表李a{
颜色:rgb(86,86,86);
}
#左列表a:链接{
颜色:rgb(86,86,86);
背景色:#ddd;
}
#左列表a:活动{
颜色:rgb(96176255);
背景色:rgb(218218218218);
}
-
我建议您使用jQuery框架。它将为您的DOM提供一个很好的抽象,并使您更容易在DOM中找到对象并为这些对象分配事件
试着读一遍。我相信这会让您大吃一惊:)我建议您使用jQuery框架。它将为您的DOM提供一个很好的抽象,并使您更容易在DOM中找到对象并为这些对象分配事件
试着读一遍。我相信这会让你惊讶:)你应该使用类来处理“当前”之类的事情,而不是id。id通常不应该改变,“当前”不是一个很好的id,因为你可以在一个页面上有一堆东西在某种程度上是“当前”的。如果您需要一些css样式来覆盖另一个样式,您可以使用!重要:
ul#leftlist li.current a {
color: rgb(96,176,255) !important;
background-color:218,218,218) !important;
}
您应该使用类来处理“current”之类的内容,而不是id。id通常不会改变,“current”不是一个很好的id,因为页面上可能有很多东西在某种程度上是“current”的。如果您需要一些css样式来覆盖另一个样式,您可以使用!重要:
ul#leftlist li.current a {
color: rgb(96,176,255) !important;
background-color:218,218,218) !important;
}
看起来您确实需要更改css中的一行:
ul#leftlist li#current a{color: rgb(96,176,255); background-color:218,218,218);}
它缺少背景色之后的rgb(
),看起来应该像:
ul#leftlist li#current a{color: rgb(96,176,255); background-color: rgb(218,218,218);}
我也同意Erlend的观点,current
更适合一个类。看起来您确实需要更改css中的一行:
ul#leftlist li#current a{color: rgb(96,176,255); background-color:218,218,218);}
它缺少背景色之后的rgb(
),看起来应该像:
ul#leftlist li#current a{color: rgb(96,176,255); background-color: rgb(218,218,218);}
我也同意Erlend的观点,current
更适合于类。函数更改为:
function myFunction(element){
var liArray = document.getElementById("leftlist").childNodes;
var i=0, item;
while (item = liArray[i++]) {
if (item.nodeType === 1) {
item.className = item.className.replace(/(^| )current( |$)/g, '');
}
}
element.className += " current";
}
CSS还需要更改类:
ul#leftlist li.current a { ... }
功能更改为:
function myFunction(element){
var liArray = document.getElementById("leftlist").childNodes;
var i=0, item;
while (item = liArray[i++]) {
if (item.nodeType === 1) {
item.className = item.className.replace(/(^| )current( |$)/g, '');
}
}
element.className += " current";
}
CSS还需要更改类:
ul#leftlist li.current a { ... }
您是否以某种方式进行更改,从而使多个元素具有相同的id?-)
这显然与整个想法背道而驰,使用id,它们必须在html文档的上下文中是完全唯一的
--首先,您应该确保只针对您的li元素:
liArray=element.parentNode.getElementsByTagName("li");
其次,可以通过在选择器中设置更多内容来确保其中一个选择器具有更高的优先级:
如果在标记上使用内联样式属性,则会获得最高优先级,但这在这里似乎没有任何用处
ID提供高优先级,类提供公平优先级,元素和伪选择器提供低优先级
但是,每种类型的优先级都是累积的,通过这种方式,您可以通过在一个选择器前面加上另一个相同优先级类型的选择器来赋予其非常高的优先级:
ul#leftlist
高优先级得1分,低优先级得1分
#myParent ul#leftlist
高优先级得2分,低优先级得1分
.myParent ul#leftlist
高优先级得1分,公平优先级得1分,低优先级得1分
因此,您可以在样式表中区分选择器的优先级!-)您是否以某种方式进行更改,从而使多个元素具有相同的id?-)
这显然与整个想法背道而驰,使用id,它们必须在html文档的上下文中是完全唯一的
--首先,您应该确保只针对您的li元素:
liArray=element.parentNode.getElementsByTagName("li");
其次,可以通过在选择器中设置更多内容来确保其中一个选择器具有更高的优先级:
如果在标记上使用内联样式属性,则会获得最高优先级,但这在这里似乎没有任何用处
ID提供高优先级,类提供公平优先级,元素和伪选择器提供低优先级
但是,每种类型的优先级都是累积的,通过这种方式,您可以通过在一个选择器前面加上另一个相同优先级类型的选择器来赋予其非常高的优先级:
ul#leftlist
高优先级得1分,低优先级得1分
#myParent ul#leftlist
高优先级得2分,低优先级得1分
.myParent ul#leftlist
高优先级得1分,公平优先级得1分,低优先级得1分
因此,您可以在样式表中区分选择器的优先级!-)