设置 css 个具有相同 ID 的多个 div
Set css of multiple divs with same id
我在 iframe 中有一个显示演示文稿。每张幻灯片都有一个 div,里面有一个音频播放器,div 的 ID 是 "narration"。
我在框架外有一个按钮,用来hide/show这个div。问题是它只对第一张幻灯片执行此操作,而不对其余幻灯片执行此操作。
编辑:这似乎隐藏了 divs:
function checkAudio() {
if (document.getElementById('cb1').checked) {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'none';
}
} else {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'block';
}
}
}
HTML in iframe(每张幻灯片有一个):
<div id="narration"><p align="middle">
<audio controls="" preload="none">
<source src="mp3/2.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio></p>
</div>
JS(iframe 之外):
function checkAudio() {
if (document.getElementById('cb1').checked) {
document.getElementById('ppt').contentWindow.document.getElementById('narration').style.display = 'none';
} else {
document.getElementById('ppt').contentWindow.document.getElementById('narration').style.display = 'block';
}
}
如果要使用按钮显示特定元素,则应使用特定 ID。如果您想使用一个按钮显示所有项目,您应该使用 类。您还可以使用 类 来显示特定元素,例如:第 5 个按钮将显示第 5 个元素,但这不是一个好的样式。
当 iframe 中的站点加载下一帧时,您的代码不知道要隐藏它再次显示的 div。您需要一个事件来处理。
您需要轮询该 ID,以便在它再次出现时隐藏它。参见:iframe contents change event?
将您的 ID 更改为 类 后(read here why), you need to update your javascript code to handle the multiple divs via a foreach 循环。
function checkAudio() {
var narrationDivs = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var newDisplay = "block";
if (document.getElementById('cb1').checked) {
newDisplay = "none";
}
narrationDivs.forEach(function(div) {
div.style.display = newDisplay;
});
}
为了在您的 iframe 更改时再次获得代码 运行,您需要更新您的 iframe 更改功能:
function setURL(url){
document.getElementById('ppt').src = url;
checkAudio(); // Just run the function again!
}
function checkAudio() {
if (document.getElementById('cb1').checked) {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'none';
}
} else {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'block';
}
}
}
您可能还想查看 audio-slideshow
插件,它允许为每张幻灯片和片段播放单独的音频文件。如果您的主要需求是这个,插件应该为您完成这项工作。
您可以找到一个演示 here and the plugin here。还有 slideshow-recorder
插件可以让你录制你的旁白。
阿斯文
我在 iframe 中有一个显示演示文稿。每张幻灯片都有一个 div,里面有一个音频播放器,div 的 ID 是 "narration"。
我在框架外有一个按钮,用来hide/show这个div。问题是它只对第一张幻灯片执行此操作,而不对其余幻灯片执行此操作。
编辑:这似乎隐藏了 divs:
function checkAudio() {
if (document.getElementById('cb1').checked) {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'none';
}
} else {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'block';
}
}
}
HTML in iframe(每张幻灯片有一个):
<div id="narration"><p align="middle">
<audio controls="" preload="none">
<source src="mp3/2.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio></p>
</div>
JS(iframe 之外):
function checkAudio() {
if (document.getElementById('cb1').checked) {
document.getElementById('ppt').contentWindow.document.getElementById('narration').style.display = 'none';
} else {
document.getElementById('ppt').contentWindow.document.getElementById('narration').style.display = 'block';
}
}
如果要使用按钮显示特定元素,则应使用特定 ID。如果您想使用一个按钮显示所有项目,您应该使用 类。您还可以使用 类 来显示特定元素,例如:第 5 个按钮将显示第 5 个元素,但这不是一个好的样式。
当 iframe 中的站点加载下一帧时,您的代码不知道要隐藏它再次显示的 div。您需要一个事件来处理。
您需要轮询该 ID,以便在它再次出现时隐藏它。参见:iframe contents change event?
将您的 ID 更改为 类 后(read here why), you need to update your javascript code to handle the multiple divs via a foreach 循环。
function checkAudio() {
var narrationDivs = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var newDisplay = "block";
if (document.getElementById('cb1').checked) {
newDisplay = "none";
}
narrationDivs.forEach(function(div) {
div.style.display = newDisplay;
});
}
为了在您的 iframe 更改时再次获得代码 运行,您需要更新您的 iframe 更改功能:
function setURL(url){
document.getElementById('ppt').src = url;
checkAudio(); // Just run the function again!
}
function checkAudio() {
if (document.getElementById('cb1').checked) {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'none';
}
} else {
var y = document.getElementById('ppt').contentWindow.document.getElementsByClassName('narration');
var i;
for (i = 0; i < y.length; i++) {
y[i].style.display = 'block';
}
}
}
您可能还想查看 audio-slideshow
插件,它允许为每张幻灯片和片段播放单独的音频文件。如果您的主要需求是这个,插件应该为您完成这项工作。
您可以找到一个演示 here and the plugin here。还有 slideshow-recorder
插件可以让你录制你的旁白。
阿斯文