javascript - 在拖动之前更改元素 href

标签 javascript html

我正在创建一个扩展程序,允许我在某些不允许的网站中拖动照片链接。元素 (photoCell) 的默认 href 为“javascript://”,并且有一个包含图像的子元素 (photo)

我希望能够将父元素的 href 更改为子图像的 src 所以当我拖动时,我拖动了子图像的 URL . (如果我在没有拖动监听器的情况下执行此操作,则此方法有效,但是当我单击一个元素时,它会加载图像而不是预期的 javascript 函数)。所以我需要在拖动完成后将 href 改回“javascript://”。

但是,即使 href 发生变化,拖动的 URL 仍然是 "javascript://"

function dragstart() {
    this.href = this.children[0].src;
}

function dragend() {
    this.href = "javascript://";
}

function doForPicturedesk() {
    var gallaryCells = document.getElementsByClassName("gallery-cell");
    for (var i = 0; i < gallaryCells.length; i++) {
        var gallaryCell = gallaryCells[i];
        var photoCell = element.children[0];    
        photoCell.addEventListener("dragstart", dragstart);
        photoCell.addEventListener("dragend",dragend);
    }
}

这是 HTML 的示例

<div class="gallery-cell jg-entry entry-visible" style="width: 534px; height: 345px; top: 10px; left: 10px;">
    <a href="javascript://" onclick="openPictureDetail('343563491-516813675371465101')" class="gallery-cell__link gallery-cell__image--hoverable">
              <img id="thumb_343563491-516813675371465101" class="gallery-cell__image " src="/bild-disp/diasdb/thumbnailextl.action?ref=343563491-516813675371465101&amp;w=false" onerror="correctMissing(this, '343563491-516813675371465101');" style="width: 534px; height: 356px; margin-left: -267px; margin-top: -178px;">
    </a>
</div>

在此输入验证码

最佳答案

我不认为这是可能的,但我知道什么。您所要做的就是使用 dataTransfer.setData 来实现您的目标。在下面尝试:

let anchor = document.querySelector('a');
anchor.ondragstart = function(event) {
  let urlWeWant = 'https://www.example.com';
  event.dataTransfer.types.forEach(type => {
  
  //Note that all you HAVE to do for this to work is:
  //event.dataTransfer.setData(type, urlWeWant);
  //BUT, I think checking the type and replace HTML is better
  
    if (type.includes('html')) {
      let clone = event.target.cloneNode(true);
      clone.href = urlWeWant;
      let dataHTML = clone.outerHTML
      event.dataTransfer.setData(type, dataHTML);
    } else {
      event.dataTransfer.setData(type, urlWeWant);
    };
  });
};
<a href='javascript:void(0);'>Drag Me Into Another Window :)</a>

关于javascript - 在拖动之前更改元素 href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66661837/

相关文章:

javascript - 如何以编程方式开始/停止编辑 contenteditable?

php - 如何创建布局模板 - 静态网站

javascript - 使用 AJAX 更新 Div 结果丢失更新

javascript - 在发送到服务器之前如何在 javascript 中压缩/gzip 用户数据?

javascript - html2canvas 忽略我的 svg 元素

javascript - 如何使用javascript更新代码的所有部分的一个变量的值?

html - 位置为 :absolute not centering inside parent div with position:relative 的图像

javascript - react 合成事件在 Web 组件中不起作用

javascript - 点击parent "li"元素需要打开underlaying "ul"

javascript - 为什么位置粘性在我的博客文章页面上不起作用?