onmouseover
事件处理程序。当用户将鼠标悬停在图像上时,它的URL应该被存储在一个变量中。我知道我可以很容易地获取图像的src
属性值,但我想要完整的URL。 src
属性存储了图像在服务器上的路径。例如,在Google Chrome中右键单击图像时,你会看到“复制图像网址”选项,它会将图像的URL复制到剪贴板中。有没有办法实现这个功能呢?谢谢。
onmouseover
事件处理程序。当用户将鼠标悬停在图像上时,它的URL应该被存储在一个变量中。我知道我可以很容易地获取图像的src
属性值,但我想要完整的URL。 src
属性存储了图像在服务器上的路径。例如,在Google Chrome中右键单击图像时,你会看到“复制图像网址”选项,它会将图像的URL复制到剪贴板中。不要使用读取原始标记的imageElement.getAttribute("src")
或$("img.something").attr("src")
,而是使用imageElement.src
属性,它将始终为您提供完整的URL。这样做可以提高代码的可读性和性能。
var imgFullURL = document.querySelector('img.something').src;
或者:
var imgFullURL = $('img.something')[0].src;
要提取主机名、路径名等信息-使用 URL()
构造函数解析 URL,该方法适用于现代浏览器,或者通过创建临时的 a
节点使用传统方法。
所以简而言之:
(function() {
const imageInfo = new Object();
imageInfo.source = '';
window.addEventListener('mouseover', function (event) {
var currentElement = event.target;
// console.log(event.target);
if (currentElement.tagName === 'IMG') {
// console.log(currentElement.outerHTML + "is a photo");
imageInfo.source = currentElement.src;
// console.log("src is :" + imageInfo.source)
return imageInfo.source;
}
})
})();
如何查找照片的 src URL,由 Trevor Rapp 在 CodePen 上分享
这是我考虑解决问题的基本步骤:
以下是每个解决方案的实现方式:
IFFE是一种很好的方式,可以让函数触发而不必担心污染命名空间。
//skeleton for an IFFE statement
(function() {
})();
一个可以在任何地方触发的事件监听器必须附加到窗口或文档。
这部分将与第二部分合并。事件监听器的第一个参数是您要监听的事件类型--在本例中为“mouseover”。因此,现在我们的代码看起来像这样:
(function () {
window.addEventListener('mouseover', function (event) {
//do stuff here
}
})()
*要确定鼠标当前指向的是哪个元素,可以使用事件目标Event.target。MDN对其定义如下:*
Event接口的target属性是一个引用,指向分派事件的对象。当事件处理程序在事件的冒泡或捕获阶段中被调用时,它与Event.currentTarget不同。--Event.Target
*因此代码应该如下所示:*
(function () {
window.addEventListener('mouseover', function (event) {
//get the current element the mouse is over
var currentElement = event.target;
}
})()
这有点棘手,因为照片或IMG可以以多种方式呈现。
我选择为最简单的方式创建解决方案,即假设Web开发人员使用了更语法上正确的版本的标记。然而,有很多时候他们可能会选择将“background-image”CSS属性应用于普通div。其他要考虑的事情可能是使用iframes,它们可以使检测子元素的属性非常令人沮丧,因为它们不允许冒泡发生。要确定一个元素是否为图片,您只需使用elem.tagName ===“IMG”
进行逻辑检查。虽然未包含在上述代码中,但如果您想检查一个div是否正在使用'background-image',您可以使用类似element.getAttribute('style')。includes('term')
的东西,并将'term'替换为像'url'或'jpg'或'png'之类的东西。有点笨拙和hacky,但只是一种想法。无论如何,代码将变为
(function () {
window.addEventListener('mouseover', function (event) {
//get the current element the mouse is over
var currentElement = event.target;
if (currentElement.tagName === 'IMG') {
//do stuff
}
}
})()
一旦您完成了逻辑并正确选择了元素,那么您可以使用element.src
来获取源URL。
您可以按任何方式执行此操作,但我尝试过实例化对象,因为听起来值可能需要经常更改,但您不一定需要存储先前的值。
因此,最终产品可能类似于此:
(function() {
const imageInfo = new Object();
imageInfo.source = '';
window.addEventListener('mouseover', function (event) {
var currentElement = event.target;
// console.log(event.target);
if (currentElement.tagName === 'IMG') {
// console.log(currentElement.outerHTML + "is a photo");
imageInfo.source = currentElement.src;
// console.log("src is :" + imageInfo.source)
return imageInfo.source;
}
})
})();
你可以使用 window.location
来获取当前所在的页面,以下内容将提供你所需的URL部分:
window.location.protocol = "http:"
window.location.host = "stackoverflow.com"
window.location.pathname = "/questions/32828681/how-to-get-url-of-an-image-in-javascript"
src
,但是甚至不清楚你打算如何使用它。 - undefinedsrc
属性中有一个完整的URL。所以如果你喜欢你绕弯子的方式来完成这个任务,你可能想要添加一个处理这种情况的示例,或者至少提到一下。而且你还需要处理相对路径的情况,例如src="image.png"
和src="/images/someimage.png"
:-) - undefined