为什么这个脚本只工作一次?只替换元素一次,然后再也不替换
Why is this script only working once? Replaces element only once, then never again
我这里有一个谜题,这可能只是JS的一个限制,但这是代码,它只工作一次。然后从此不再。不知道为什么。
它基本上是用在每个JS调用中设置的代码替换TD内容。初始表的设置只是通过VLC插件从IP上的设备打开一个流通道。当页面加载时,默认代码在表中运行良好。
然后,当我点击一个按钮时,它会交换出正确的代码,新的流会启动,然后它就再也不能工作了:(…
似乎还没有什么令人惊讶的难以处理的事情,我显然错过了一些东西,或者可能错过了一些关于限制的知识?
感谢您的真知灼见。
区块报价
<table><tr><td id="TABLENAME">
<embed pluginspage="http://www.videolan.org"
type="application/x-vlc-plugin"
version="VideoLAN.VLCPlugin.2"
id="srcVIDEO4"
width="324"
height="132"
autoplay="yes" loop="no"
target="rtsp://192.168.88.235:556/stream.sdp" />
</td></tr></table>
<script>
function display556VIDEO4(){
var strVIDEO4 = '<embed pluginspage="http://www.videolan.org" '
type="application'/x-vlc-plugin" '
version="VideoLAN.VLCPlugin.2" '
id="srcVIDEO4" '
width="324" '
height="132" '
autoplay="yes" loop="no" '
target="rtsp://192.168.88.235:556/stream.sdp" />';
var tdElementVIDEO4 = document.getElementById('TABLENAME');
var trElementVIDEO4 = tdElementVIDEO4.parentNode;
trElementVIDEO4.removeChild(tdElementVIDEO4);
trElementVIDEO4.innerHTML = strVIDEO4 + trElementVIDEO4.innerHTML;
}
function display557VIDEO4(){
var strVIDEO4 = '<embed pluginspage="http://www.videolan.org" '
type="application'/x-vlc-plugin" '
version="VideoLAN.VLCPlugin.2" '
id="srcVIDEO4" '
width="324" '
height="132" '
autoplay="yes" loop="no" '
target="rtsp://192.168.88.235:557/stream.sdp" />';
var tdElementVIDEO4 = document.getElementById('TABLENAME');
var trElementVIDEO4 = tdElementVIDEO4.parentNode;
trElementVIDEO4.removeChild(tdElementVIDEO4);
trElementVIDEO4.innerHTML = strVIDEO4 + trElementVIDEO4.innerHTML;
}
function display558VIDEO4(){
var strVIDEO4 = '<embed pluginspage="http://www.videolan.org" '
type="application'/x-vlc-plugin" '
version="VideoLAN.VLCPlugin.2" '
id="srcVIDEO4" '
width="324" '
height="132" '
autoplay="yes" loop="no" '
target="rtsp://192.168.88.235:558/stream.sdp" />';
var tdElementVIDEO4 = document.getElementById('TABLENAME');
var trElementVIDEO4 = tdElementVIDEO4.parentNode;
trElementVIDEO4.removeChild(tdElementVIDEO4);
trElementVIDEO4.innerHTML = strVIDEO4 + trElementVIDEO4.innerHTML;
}
function display559VIDEO4(){
var strVIDEO4 = '<embed pluginspage="http://www.videolan.org" '
type="application'/x-vlc-plugin" '
version="VideoLAN.VLCPlugin.2" '
id="srcVIDEO4" '
width="324" '
height="132" '
autoplay="yes" loop="no" '
target="rtsp://192.168.88.235:559/stream.sdp" />';
var tdElementVIDEO4 = document.getElementById('TABLENAME');
var trElementVIDEO4 = tdElementVIDEO4.parentNode;
trElementVIDEO4.removeChild(tdElementVIDEO4);
trElementVIDEO4.innerHTML = strVIDEO4 + trElementVIDEO4.innerHTML;
}
</script>
<button style="background-color:green" type="button" onclick="display556VIDEO4()">6</button>-
<button style="background-color:green" type="button" onclick="display557VIDEO4()">7</button>-
<button style="background-color:green" type="button" onclick="display558VIDEO4()">8</button>-
<button style="background-color:green" type="button" onclick="display559VIDEO4()">9</button><br/>
区块报价
function display558VIDEO4(){
var strVIDEO4 = '<embed pluginspage="http://www.videolan.org" '
type="application'/x-vlc-plugin" '
version="VideoLAN.VLCPlugin.2" '
id="srcVIDEO4" '
width="324" '
height="132" '
autoplay="yes" loop="no" '
target="rtsp://192.168.88.235:558/stream.sdp" />';
var tdElementVIDEO4 = document.getElementById('TABLENAME');
var trElementVIDEO4 = tdElementVIDEO4.parentNode;
trElementVIDEO4.removeChild(tdElementVIDEO4);
trElementVIDEO4.insertBefore(document.createRange().createContextualFragment(strVIDEO4),trElementVIDEO4.firstChild)
}
只需使用
trElementVIDEO4.insertBefore(document.createRange().createContextualFragment(strVIDEO4),trElementVIDEO4.firstChild)
而不是
trElementVIDEO4.innerHTML = strVIDEO4 + trElementVIDEO4.innerHTML;
在所有的脚本中
另外,不要将点击事件放在标记中,而是将它们保存在javascript 中
而不是
<button style="background-color:green" type="button" onclick="display556VIDEO4()">6</button>-
<button style="background-color:green" type="button" onclick="display557VIDEO4()">7</button>-
<button style="background-color:green" type="button" onclick="display558VIDEO4()">8</button>-
<button style="background-color:green" type="button" onclick="display559VIDEO4()">9</button><br/>
使用
<button style="background-color:green" type="button" id= '556VIDEO4'>6</button>-
<button style="background-color:green" type="button" id= '557VIDEO4'>7</button>-
<button style="background-color:green" type="button" id= '558VIDEO4'>8</button>-
<button style="background-color:green" type="button" id= '559VIDEO4'>9</button><br/>
并在javascript中放置以下代码:
document.addEventListener("click", function(e){
if(e.target.tagName === 'BUTTON'){
button = e.target;
eval('display'+button.id+'()');//call display559VIDEO4()}
});
找到了!
我需要在var str声明中包含<TD id="TABLENAME">
和关闭</TD>
!当它换掉时,它正在移除TD。把它们放回原处,原始代码就会非常有效。
感谢您的调试帮助!
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript匹配以从URL中删除部分文件名-替换最后一次出现的内容
- Javascript 正则表达式,只替换一次
- 为什么这个脚本只工作一次?只替换元素一次,然后再也不替换
- 如何使用replaceWith()一次替换多个选择器
- Node.js一次替换多个字符串
- nodejs:原子文件替换操作,只触发一次一些观察者
- JS - 正则表达式替换在一次调用中发生多次,如何让它运行一次
- 为什么将 ng-select 替换为自定义指令会导致$http请求不会每隔一段时间发送一次
- JS字符串仅替换每隔一次
- JS一次查找和替换多个单词
- 替换仅工作一次
- Javascript的replace()在每次出现时只替换一次
- 只替换一次双引号的最好方法是什么?
- 一次替换大量的绝对链接
- 替换函数只工作一次(javascript)
- 替换如何将每个单词替换一次
- Javascript一次替换多个字符
- JavaScript正则表达式字符串替换只工作一次