使用replace时,Javascript会保留事件数据

时间:2017-01-22 14:56:57

标签: javascript jquery events

我在用replaceWith()替换div时试图保留事件数据。当我尝试它时,它无法找到事件。目前我正在使用postmessage调用消息事件列表器来替换潜在元素内的脚本(对于没有调用消息事件的时候)

$allResults

script.text包含我想要保留在“e.data.subtitleUrl”中的数据

1 个答案:

答案 0 :(得分:0)

<强>更新

我做了一个例子。你可以查一下。

&#13;
&#13;
$('#click-div').click(function(e){
	var script = document.createElement('script');
  script.text = 'alert($("#added-script").data("subtitleUrl"));'
  script.dataset.subtitleUrl = 'Hold the data';
  script.setAttribute('id', 'added-script');
  $('#element-to-replace').replaceWith(script); 
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='click-div'>
  Click
</div>
<div id='element-to-replace'></div>
&#13;
&#13;
&#13;

我已将id添加到在函数中创建的script元素。

您可以尝试data()方法来保存数据。

eventer(messageEvent,function(e) {
    console.log('origin: ', e.origin);

    // Check if origin is proper
    if( e.origin != 'http://domain.com' || e.origin != 'http://www.domain.com'){ return }
    console.log('revieced message: ', e.data);
    player.Resume({ uuid: e.data.rid, title: e.data.rtitle });                      

    var script = document.createElement('script');
    script.text = "player.ready(function () { player.ima(adOptions);player.ima.requestAds(); window.SubtitlesOctopusOnLoad = function () { var options = { video: player.tech_.el_, subUrl: $('#added-script').data('subtitle-url') || '<?php echo WEB_ROOT; ?>/files/<?php echo validation::safeOutputToScreen($file->subtitle); ?>', availableFonts: fonts, workerUrl: '<?php echo PLUGIN_WEB_ROOT; ?>/mediaplayer/assets/players/videojs/worker.js'};window.octopusInstance = new SubtitlesOctopus(options); window.octopusInstance.resize();}; if (SubtitlesOctopus) { SubtitlesOctopusOnLoad(); } });";
    script.dataset.subtitleUrl = e.data.subtitleUrl;
    script.setAttribute('id', 'added-script');
    $('#subtitles').replaceWith(script);                        

}, false);  

然后你可以通过$('#added-script').data('subtitle-url')获得subtitleUrl。