Javascript 如何管理同一页面中多次包含的相同代码的CSS选择器?
我经常创建在页面顶部使用传统选项卡的web应用程序。在这样做的时候,我有一个共同的问题,我一直无法找到一个优雅的解决方案 问题是用户可以在同一页面上的两个单独选项卡中加载相同的内容。这两个不同选项卡上的任何HTML ID都会发生冲突,导致任何引用其中一个ID的JavaScript在第二个选项卡上失败。此外,在这些页面中引用类的任何JavaScript都会影响所有选项卡上的元素,而我只希望它影响当前选项卡 例如,如果我在同一个页面中两次包含这段代码会怎么样Javascript 如何管理同一页面中多次包含的相同代码的CSS选择器?,javascript,php,html,jquery,css,Javascript,Php,Html,Jquery,Css,我经常创建在页面顶部使用传统选项卡的web应用程序。在这样做的时候,我有一个共同的问题,我一直无法找到一个优雅的解决方案 问题是用户可以在同一页面上的两个单独选项卡中加载相同的内容。这两个不同选项卡上的任何HTML ID都会发生冲突,导致任何引用其中一个ID的JavaScript在第二个选项卡上失败。此外,在这些页面中引用类的任何JavaScript都会影响所有选项卡上的元素,而我只希望它影响当前选项卡 例如,如果我在同一个页面中两次包含这段代码会怎么样 <style> #c
<style>
#container { margin; 20px; }
#message { background: red; }
</style>
<div id='container'>
<span id='message'>This was from an include file</span>
<button id='changeColorBtn'>Change color</button>
</div>
<script>
$('#changeColorBtn').click(() => $('#message').css('background', 'blue'))
</script>
#容器{margin;20px;}
#消息{背景:红色;}
这是一个包含文件
变色
$(“#changeColorBtn”)。单击(()=>$(“#消息”).css('background','blue'))
JSFIDDLE来说明问题:
我过去曾尝试或考虑过三种方法来解决这一问题:
在HTML/CSS中,是否有我所缺少的元素或方法可以解决这个问题?您必须在元素上使用一个类,而不是ID,该元素具有多次使用的相同样式,并且您希望在文档中使用相同的CSS样式规则来影响该元素 例如:
这是与第二段风格相同的第一段
这是与第一段风格相同的第二段
现在来谈谈影响文档中多次使用的同一类型元素的问题
因为在同一父元素下,span(message)和button是成对的,所以可以访问事件侦听器中循环的索引,以使用所选的nodelist标识正在按下的循环
我在节点列表上使用vanilla JSquerySelectorAll()
。必须对具有相同标记名的多个元素使用类
我的目标是元素父类let message=document.queryselectoral('.content span')
和let btn=document.queryselectoral('.content button')
。然后通过forEach循环运行节点,并使用forEach循环中的索引向button元素添加eventlistener。尽管此索引是btn
元素的索引,但由于这些元素是成对的,因此它将使用btn
中的索引以正确的消息
元素为目标
let btn=document.querySelectorAll('.container按钮');
让message=document.querySelectorAll('.container span');
btn.forEach((按钮,i)=>{
//简言之。。。。
//每次循环迭代btn的节点列表时,它都会分配关键字
//“button”指向元素nodelist的迭代,因此当我们单击特定的
//‘按钮’指的是当时按下的按钮,而不是所有按钮
按钮。addEventListener('单击',(e)=>{
消息[i].style.backgroundColor='blue';
})
})
.container span{
背景:红色;
}
这是一个包含文件
变色
这是一个包含文件
变色
您必须在元素上使用一个类而不是ID,该元素具有多次使用的相同样式,并且您希望在文档中使用相同的css样式规则来影响该样式
例如:
这是与第二段风格相同的第一段
这是与第一段风格相同的第二段
现在来谈谈影响文档中多次使用的同一类型元素的问题
因为在同一父元素下,span(message)和button是成对的,所以可以访问事件侦听器中循环的索引,以使用所选的nodelist标识正在按下的循环
我在节点列表上使用vanilla JSquerySelectorAll()
。必须对具有相同标记名的多个元素使用类
我的目标是元素父类let message=document.queryselectoral('.content span')
和let btn=document.queryselectoral('.content button')
。然后通过forEach循环运行节点,并使用forEach循环中的索引向button元素添加eventlistener。尽管此索引是btn
元素的索引,但由于这些元素是成对的,因此它将使用btn
中的索引以正确的消息
元素为目标
let btn=document.querySelectorAll('.container按钮');
让message=document.querySelectorAll('.container span');
btn.forEach((按钮,i)=>{
//简言之。。。。
//每次循环迭代btn的节点列表时,它都会分配关键字
//“button”指向元素nodelist的迭代,因此当我们单击特定的