标签模版-过滤 HTML 字符串

  function SaferHTML(templateData) {
    let s = templateData[0];
    for (let i = 1; i < arguments.length; i++) {
      let arg = String(arguments[i]);

      s += arg.replace(/&/g, "&amp;")
              .replace(/</g, "&lt;")
              .replace(/>/g, "&gt;");
      s += templateData[i]         
    }
    return s
  }

  let sender = '<a>alert("abc")</a>';
  let message = SaferHTML`<p>${sender} has sent you a message.</p>`;
  message //<p>&lt;a&gt;alert("abc")&lt;/a&gt; has sent you a message.</p>
  function SaferHTML(templateData) {
    let s = [];
    
    for (let i = 1; i < arguments.length; i++) {
      let arg = String(arguments[i]); 
      
      s[i-1] = arg.replace(/&/g, "&amp;")
                  .replace(/</g, "&lt;")
                  .replace(/>/g, "&gt;");
    }
    return String.raw({ raw: templateData }, ...s);
  }


  let sender = '<a>alert("abc")</a>';
  let message = SaferHTML`<p>${sender} has sent you a message.</p>`;
  message //<p>&lt;a&gt;alert("abc")&lt;/a&gt; has sent you a message.</p>

 

<think>好的,我现在需要解决用户的问题:在Element UI的el-table-column中通过模板实现字符串截取。用户提到了使用模板来重新显示数据,否则页面没有数据显示,这可能涉及到如何在模板中处理数据。 首先,我应该回忆一下Element UI的el-table组件结构。el-table-column通常使用prop来绑定数据字段,但用户想对数据进行处理,比如截断字符串,这时候需要使用作用域插槽(scoped slot)。根据用户提供的引用[1]中的例子,他们使用了<template slot-scope="scope">来访问行数据,并在其中添加div,并调用方法。所以,我需要指导用户如何在这个模板里对字符串进行操作。 接下来,用户的需求是字符串截取。在Vue的模板中,可以直接使用JavaScript的字符串方法,比如slice或substring。例如,如果scope.row.description是需要截取的字段,可以在模板里使用{{ scope.row.description.slice(0, 20) }}这样的表达式来显示前20个字符。 另外,用户可能想要在截取后添加省略号,这样显示会更友好。这时候可以结合计算属性或者直接在模板中使用三元运算符判断长度是否超过限制,超过的话截断并加...,否则原样显示。例如:{{ scope.row.description.length > 20 ? scope.row.description.slice(0,20)+'...' : scope.row.description }}。 还要注意,用户提到在引用[1]中添加了div并绑定了点击事件,所以需要确保在添加截取逻辑的同时,保留原有的事件或其他功能。比如,保持@click="openDetails(scope.row)",同时处理字符串。 另外,需要考虑如果字段可能为null或undefined的情况,这时候可能需要使用{{ scope.row.description ? ... : '' }}来避免错误。 总结步骤应该是:在el-table-column中使用template和slot-scope获取数据,然后在插槽内使用JavaScript字符串方法进行截取,并添加必要的样式或事件处理。同时,处理可能的空值情况,确保页面正常显示。 最后,用户可能还想知道如何全局处理这类数据,或者是否有更优雅的方式,比如使用过滤器(filter),但根据问题描述,用户希望直接在模板中实现,因此提供模板内的解决方案即可。</think>在Element UI的`el-table-column`中,可以通过作用域插槽实现字符串截取,具体步骤如下: 1. **使用作用域插槽访问数据** 在`<el-table-column>`标签内添加`<template>`标签,通过`slot-scope="scope"`获取当前行数据 2. **使用JavaScript字符串方法处理数据** 在模板中直接使用`.slice()`或`.substring()`方法截取字符串,例如: ```html <el-table-column prop="content" label="内容"> <template slot-scope="scope"> {{ scope.row.content.slice(0, 20) + (scope.row.content.length > 20 ? '...' : '') }} </template> </el-table-column> ``` 完整示例: ```html <el-table :data="tableData"> <el-table-column label="摘要"> <template slot-scope="scope"> <!-- 截取前30字符,超长显示省略号 --> <span>{{ scope.row.summary ? (scope.row.summary.length > 30 ? scope.row.summary.substring(0,30) + '...' : scope.row.summary) : '--' }}</span> </template> </el-table-column> </el-table> ``` **优化建议**: 1. 对于空值处理建议使用`{{ scope.row.field || '--' }}`显示占位符 2. 可结合CSS设置`text-overflow: ellipsis`实现溢出省略号[^2] 3. 复杂的截取逻辑建议封装为Vue过滤器使用: ```js // 全局过滤器 Vue.filter('truncate', (value, length) => { if (!value) return '' return value.length > length ? value.substring(0, length) + '...' : value }) // 模板中使用 {{ scope.row.content | truncate(20) }} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值