JS新手,将函数中的图片改写成html呈现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS新手,将函数中的图片改写成html呈现相关的知识,希望对你有一定的参考价值。

这个是那个插件的js,原本是点击微博下方显示的图片然后弹出层,现在要把那个图片修改成html代码,可以自定义内容,不仅仅是一张图片而已。以前用的是common.js写好的imgLoader,现在要改写自己的,显示html.

应该就是去掉最后一个函数 this.buildAttach = function(data, plugData, dom, isTranspond)里面的imgLoader 然后写自己的代码。
我不了解JS,求各位大大帮忙!!!
下面是JS文件中的代码:
this.getContentHtml = function(data)

var html ='<div class="attach_detail">This is attach html position!</div>';

return html;
;
this.buildContent = function(val, data)
if(!data || data.length <= 0)return val;
var left = [];
if(val && val.length > 0)
for(var i in data)
var finded = false;
var d = data;
val.find("w_" + this.name + "[rel='"+ d.ind +"']").each(function()
finded = true;
var img = $(t.getContentHtml(d));
$(this).replaceWith(img);
);
if(!finded)left.push(d);


if(left.length > 0)
for(var i=0;i<left.length;i++)
var d = left;
var img = $(this.getContentHtml(d));
val.append(img);


return val;
;
this.buildAttach = function(data, plugData, dom, isTranspond)
for(var i=0;i<plugData.length;i++)
if(this.imgLoader == null)
this.imgLoader = new imgLoader(
byorder:true,
hideError:false,
autoShow:true
);
var d = plugData;
d.img = "/images/attach.png";

(function(d)
t.imgLoader.addItem(d.img, dom,
function(imgInfo)
if(t.mode == "timeline" || t.mode == "flow")

$(imgInfo.domimg).css("cursor", "pointer").click(function()

t.host.showAttachDetail(dom, null, data, isTranspond);
dom.append(t.getContentHtml(d, true));
);


, 180, 65, "zoom", d);
)(d);

this.host.attachLoaded(dom, 98);
return true;
;

这个不单单是js,还引用了jQuery,LZ应该学习下简单的js和jquery语法,基本就能看懂了 参考技术A jquery框架下有类似功能的js插件 参考技术B 多多看书吧,慢慢来

无法将 API JSON 数据呈现到 vue js 中的表

【中文标题】无法将 API JSON 数据呈现到 vue js 中的表【英文标题】:Unable to render API JSON data to table in vue js 【发布时间】:2019-12-02 18:21:01 【问题描述】:

我有这个从 API 获取数据并将其呈现到表中的 html 文件,它从那里成功地工作。

我正在尝试将 html 文件转换为 vue,但我遇到了一些问题,虽然 vue 可以从 API 获取数据,但它根本没有在网页上显示表格(尽管我已经导出了 JSONTable.vue 并将其导入到 App.vue 以便 App.vue 可以访问 JSONTable.vue 页面)

从我的 html 文件中,我使用了成功绘制表格的这两个外部资源:

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> 

但是我在标签中用这个替换了它,因为 vue 抛出模板错误,它修复了模板问题:

import JQuery from 'jquery'
let $ = JQuery

如何在 vue 中使用上面的外部样式表和脚本并允许我摆脱“import JQuery”(因为如果我删除 import JQuery,它会说 $ 未定义)?

我的 vue 网站:

<template>
    <head>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <!-- styling the table with an external css file -->
    <body>
        <div class="container">
            <div class="table-responsive">
                <h1>JSON data to HTML table</h1>
                <br />
                <table class="table table-bordered table-striped" id="tracerouteTable">
                    <tr>
                        <th>id</th>
                        <th>name</th>
                        <th>salary</th>
                        <th>age</th>
                        <th>image</th>
                    </tr>
                </table>
            </div>
        </div>
    </body>
</head>
</template>

<script>

export default 
    name: 'JSONTable'



import JQuery from 'jquery'
let $ = JQuery 



$(document).ready(function()
    $.getJSON("http://dummy.restapiexample.com/api/v1/employees", function(data)
        var employeeData = '';

        console.log(data);

        $.each(data, function(key, value)
            employeeData += '<tr>';
            employeeData += '<td>'+value.id+'</td>';
            employeeData += '<td>'+value.employee_name+'</td>';
            employeeData += '<td>'+value.employee_salary+'</td>';
            employeeData += '<td>'+value.employee_age+'</td>';
            employeeData += '<td>'+value.profile_image+'</td>';
            employeeData += '<tr>';
        );
        $('#tracerouteTable').append(employeeData);
    );
);

</script>

【问题讨论】:

【参考方案1】:

其实,如果你在使用 Vue,你应该尽量避免使用 Jquery,在 99% 的情况下,这是没有必要的。

我创建了this example 来向您展示如何在没有 Jquery 的情况下做到这一点。只需注意两点:

OBS 1:这在此示例中不起作用,因为 CORS 不允许在此处加载此数据,因为我使用的是模拟数据

OBS 2:我正在使用 fetch 发出 http 请求,要使其在所有浏览器中都能正常工作,您必须使用像 github fetch 这样的 polyfill

const initialData = () => 
  return Promise.resolve([
    "id":"40877","employee_name":"Lexie","employee_salary":"3331","employee_age":"60","profile_image":"","id":"40878","employee_name":"Randi","employee_salary":"9608","employee_age":"29","profile_image":"","id":"40879","employee_name":"Wilber","employee_salary":"9626","employee_age":"58","profile_image":"","id":"40881","employee_name":"Jena","employee_salary":"3669","employee_age":"47","profile_image":"","id":"40882","employee_name":"Annetta","employee_salary":"8428","employee_age":"45","profile_image":"","id":"40883","employee_name":"Blaze","employee_salary":"9090","employee_age":"60","profile_image":"","id":"40884","employee_name":"Vida","employee_salary":"8633","employee_age":"54","profile_image":"","id":"40885","employee_name":"Tyrese","employee_salary":"1133","employee_age":"55","profile_image":"","id":"40888","employee_name":"Assunta","employee_salary":"8291","employee_age":"37","profile_image":"","id":"40889","employee_name":"Talon","employee_salary":"7896","employee_age":"35","profile_image":"","id":"40891","employee_name":"Selina","employee_salary":"6091","employee_age":"68","profile_image":"","id":"40892","employee_name":"Madyson","employee_salary":"2057","employee_age":"39","profile_image":""])


new Vue(
  el: '#app',
  data: function ()
    return 
      list: []
    
  ,
  mounted: async function ()
    /*
     OBS 1:this will not work in this example, because the CORS don't allow to load this data here
     because that I'm using mocked data
     
     OBS 2: I'm using fetch to make the http request, to make it works in all browser you have tu use a pollify
     like https://github.com/github/fetch/
    */
    
    
     //const response = await fetch("//dummy.restapiexample.com/api/v1/employees")
     //this.list = await response.json()
    this.list = await initialData()
  
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> 
<div id="app">
  <div class="table-responsive">
    <h1>JSON data to HTML table</h1>
    <br />
    <table class="table table-bordered table-striped" id="tracerouteTable">
      <thead>
        <tr>
          <th>id</th>
          <th>name</th>
          <th>salary</th>
          <th>age</th>
          <th>image</th>
        </tr>
       </thead>
      <tbody>
        <tr v-for="item in list" :key="item.list">
          <td>item.id</td>
          <td>item.employee_name</td>
          <td>item.employee_salary</td>
          <td>item.employee_age</td>
          <td>item.profile_image</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

【讨论】:

“其实,如果你在使用 Vue,你应该尽量避免使用 Jquery,在 99% 的情况下,这是没有必要的。” - 我没有认为两者具有相同的目的,我不同意你的说法。特别是考虑到您必须通过实现fetch polyfill 来弥补 jQuery 的不足。不是说 jQuery 总是必要的,但我强烈反对“如果你使用 X,就不要使用 Y”。 可能在某些情况下 Jquery 可以提供帮助,有一些有趣的插件。如果您使用 Jquery 更改 DOM,您可能会遇到 vue 的问题,它不会对您的更改做出反应,这不是推荐的方式。而且,如果您不打算使用 Jquery 操作 DOM,那么使用整个 lib 来进行 ajax 调用并执行 foreach 循环(您可以在本机进行)是过大的。重点不是“如果你使用 X,就不要使用 Y”,问题只是将 Jquery 与 Vue/React/Angular/... /跨度> 感谢您的帮助,继续 OBS 2 如果我不使用 jquery,JavaScript 函数会是什么样子?需要定义项目和列表,但我不确定如何在代码中编写它。我也在使用来自这个 API 的没有 CORS 问题的数据:dummy.restapiexample.com/api/v1/employees "如果我不使用 jquery,JavaScript 函数会是什么样子":如果您使用 webpack 之类的工具进行捆绑,您只需安装 pollify 并将其添加到您的 main .js 文件。如果您没有使用任何捆绑工具,只是在 html 文件中添加脚本,则只需导入它,就像我在 codepen 示例中所做的那样。如果您的浏览器已经实现了 window.fetch,则 pollify 不会做任何事情。 “我也在使用来自这个 API 的没有 CORS 问题的数据”,如果您尝试将其加载到 codepen 或此处的 CORS 问题。 我已经导入了脚本,没有使用任何捆绑工具,但是表格仍然没有渲染。

以上是关于JS新手,将函数中的图片改写成html呈现的主要内容,如果未能解决你的问题,请参考以下文章

如何用js更改tr的背景颜色 新手求助

REACT JS:映射要在 JSX 中呈现的对象数组

Laravel Yajra 数据表呈现自定义 html / 列样式

python新手---学习第一天

攻防世界misc新手区005

swiper.js 多图片页面的懒加载lazyLoading