【问题标题】:Swapping images in Javascript在 Javascript 中交换图像
【发布时间】:2020-12-01 15:22:20
【问题描述】:

终于从JS开始了,我有个问题。

为什么这段代码不起作用(我在 HTML 中有两张带有 fir 和 sec Id 的图像)

function swap() {
  let x = document.getElementById("fir").src
  let y = document.getElementById("sec").src

  let z = x
  x = y
  y = z
}

但是这个可以

function swap() {
  let x = document.getElementById("fir")
  let y = document.getElementById("sec")

  let z = x.src

  x.src = y.src
  y.src = z
}

【问题讨论】:

  • 只是一个提示:[x.src, y.src] = [y.src, x.src]
  • 这是一种在不使用第三个变量的情况下交换两个变量的方法吗?
  • 第一段代码新建了一个src变量,改变了字符串值,不影响元素,但是第二段代码创建了元素的引用,直接影响了src属性。
  • @Orochi 是的,你可以做两个以上也可以[a,b,c] = [c,b,a] 它被称为Destructuring assignment
  • 这与您有时会遇到的所有 "illegal invocations" 相关...

标签: javascript html


【解决方案1】:

这是因为 document.getElementById("fir").src 返回图像的路径(字符串),而在第二种情况下,您正在操作 DOM(引用)。您可以在这两种情况下控制日志或应用断点输出并检查发生了什么。

【讨论】:

【解决方案2】:

第一个不起作用的原因是,当您交换了变量指向的元素时,您并没有更改元素本身。有几种交换元素的方法(您已经发布并测试了其中一种)

  1. 交换源字段
  2. 交换 externalHTML(z = x.outerHTML;x = y.outerHTML;y = z.outerHtML)
  3. 移动实际元素 (z = x.nextSibling; y.parentNode.insertBefore(x,y); z.parentNode.insertBefore(y,z);

示例 3 实际上是不完整的:您还需要处理没有 nextSibling 的情况。但希望这能让您更深入地了解尝试 1 和 2 正在做什么以及如何更改和操作元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多