在vue框架下,怎么给原生js添加的dom元素添加@click点击事件(el upload添加图片上传数量显示)

在vue框架下,怎么给原生js添加的dom元素添加@click点击事件

先说下问题出现的场景,vue框架下,在elementui里的upload创建一个组件后面显示图片数量,所以想着添加一个span标签(后期实现是利用elment里面提供的一个slot插槽实现的)

// 部分代码隐藏了
// vue图片上传组件
<el-form-item label="图片">
    <el-upload
      action="#"
      list-type="picture-card"
      :on-preview="handlePicture"
      :on-remove="handleRemove"
      :limit="3"
      :http-request="httpRequest"
      :file-list="pictureList"
      :on-change="handleChange"
     >
      <i class="el-icon-plus"></i>       
    </el-upload>
 </el-form-item>

默认的效果是这样的
在这里插入图片描述

想实现的是这样的
在这里插入图片描述

方法1:在这里插入图片描述

代码实现的效果不对,失败

方法2

在这里插入图片描述
通过控制台可以知道,可以尝试通过原生js给 图片列表的那个div添加一个子节点

在这里插入图片描述
该方法有个缺点,图片数量变化时,后面的数据不变。
后期想到 可以先写一个span标签,先display为none,后期再把它给到 图片列表里

在这里插入图片描述

// 部分代码隐藏了
setPicNum() {
      this.$nextTick(() => {
        let parentDom = document.querySelector(".el-upload").parentNode;
        let childDom = document.querySelector(".test")
        childDom.setAttribute("style", "block");
        childDom.innerHTML = "<span>888<>";
        parentDom.appendChild(childDom);
        console.log("999", parentDom);
      });
    },

该方法还可以个通过原生js添加的元素,绑定vue里的@click等事件

方法3

// 部分代码隐藏了
// vue图片上传组件
<el-form-item label="图片">
    <el-upload
      action="#"
      list-type="picture-card"
      :on-preview="handlePicture"
      :on-remove="handleRemove"
      :limit="3"
      :http-request="httpRequest"
      :file-list="pictureList"
      :on-change="handleChange"
     >
      <i class="el-icon-plus"></i>
      <div slot="tip" class="el-upload__tip">
       {{ pictureList.length }}/3
      </div>
    </el-upload>
 </el-form-item>

利用 element里提供的slot实现了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于没有 `viewbox` 的 SVG 图片,你可以通过以下步骤给它添加 `viewbox`: 1. 首先,在你的 Vue 组件中引入 `el-upload` 组件和需要上传的 SVG 图片文件。 ```javascript <template> <el-upload class="upload" action="/your-upload-url" :headers="yourHeaders" :on-success="handleSuccess" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> <script> export default { data() { return { yourHeaders: { // 添加你的请求头部信息 } }; }, methods: { handleSuccess(response, file, fileList) { // 处理上传成功后的逻辑 } } }; </script> ``` 2. 在上传成功后的回调函数 `handleSuccess` 中,获取到上传的 SVG 文件,并使用 DOM 操作给它添加 `viewbox` 属性。 ```javascript handleSuccess(response, file, fileList) { const reader = new FileReader(); reader.onload = (event) => { const svgContent = event.target.result; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(svgContent, "image/svg+xml"); const svgElement = xmlDoc.querySelector("svg"); if (svgElement.getAttribute("viewBox") === null) { svgElement.setAttribute("viewBox", "0 0 width height"); const newSvgContent = new XMLSerializer().serializeToString(xmlDoc); // 发送带有新的 viewbox 的 SVG 内容到服务器或进行其他操作 // ... } }; reader.readAsText(file.raw); } ``` 在上述代码中,使用 `FileReader` 对象读取上传的 SVG 文件,并将其内容解析为 XML 文件。然后,使用 DOM 操作找到 `<svg>` 元素,检查它是否已经有 `viewbox` 属性。如果没有,则使用 `setAttribute` 方法添加 `viewbox` 属性,并设置其值为 `"0 0 width height"`。最后,使用 `XMLSerializer` 对象将修改后的 XML 内容转换为字符串,你可以将其发送到服务器或进行其他操作。 这样,你就可以给没有 `viewbox` 的 SVG 图片添加 `viewbox` 属性了。请根据你的实际需求修改代码中的 URL、请求头、上传成功的逻辑以及数据处理逻辑。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值