省略内容在句子中间

news2025/1/26 15:35:19

一、使用二分查找法

每次查找时,将查找范围分成两半,并判断目标值位于哪一半,从而逐步缩小查找范围。

循环查找

  1. 计算中间位置 mid = Math.floor((low + high) / 2)
  2. 比较目标值 target 和中间位置的元素 arr[mid]
    1. 如果 target == arr[mid],则找到目标值,返回 mid
    2. 如果 target < arr[mid],则目标值在左半部分,更新 high = mid - 1
    3. 如果 target > arr[mid],则目标值在右半部分,更新 low = mid + 1。

终止条件

  1. 当 low > high 时,表示查找范围为空,目标值不存在于数组中,返回 -1 或其他表示未找到的标志。
function binarySearch(arr, target) {
  let low = 0;
  let high = arr.length - 1;

  while (low <= high) {
    const mid = Math.floor((low + high) / 2);
    if (arr[mid] === target) {
      return mid; // 找到目标值,返回索引
    } else if (arr[mid] < target) {
      low = mid + 1; // 目标值在右半部分
    } else {
      high = mid - 1; // 目标值在左半部分
    }
  }

  return -1; // 未找到目标值
}

// 示例使用
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const target = 7;
console.log(binarySearch(arr, target)); // 输出: 6

<template>
  <div class="ellipsis-container" ref="ellipsisContainer">
    {{ startText }}...{{ endText }}
  </div>
</template>

<script>
import { defineComponent, ref, onMounted, watch } from 'vue';

export default defineComponent({
  props: {
    endLen: {
      type: Number,
      default: 10,
    },
    text: {
      type: String,
      default: '外层套一个块级(block)元素,内部是一个行内(inline)元素。给外层元素设置溢出隐藏的样式属性ne元素。给外层元素设置溢出隐藏的样式外层套一个块级(block)元素,内部是一个行内(inline)元素。给外层元素设置溢出隐藏的样式属性ne元素。给外层元素设置溢出隐藏的样式外层套一个块级(block)元素,内部是一个行内(inline)元素。给外层元素设置溢出隐藏的样式属性ne元素。给外层元素设置溢出隐藏的样式外层套一个块级(block)元素,内部是一个行内(inline)元素。给外层元素设置溢出隐藏的样式属性ne元素。给外层元素设置溢出隐藏的样式',
    },
    startLen: {
      type: Number,
      default: null,
    },
  },
  setup (props) {
    const ellipsisContainer = ref(null);
    const str = ref(props.text);
    const startText = ref('');
    const endText = ref('');

    const updateText = () => {
      if (!ellipsisContainer.value) return;
      let containerWidth = ellipsisContainer.value.clientWidth;
      let fullText = str.value;
      let startTextLength = 0;
      let endTextLength = 0;

      // 使用二分查找法找到合适的截断位置
      let low = 0;
      let high = fullText.length;

      while (low <= high) {
        let mid = Math.floor((low + high) / 2);
        let tempStartText = fullText.substring(0, mid);
        let tempEndText = fullText.substring(fullText.length - mid);
        let combinedText = `${tempStartText}...${tempEndText}`;

        ellipsisContainer.value.textContent = combinedText;

        if (ellipsisContainer.value.scrollWidth <= containerWidth) {
          startTextLength = mid;
          endTextLength = mid;
          low = mid + 1;
        } else {
          high = mid - 1;
        }
      }

      startText.value = fullText.substring(0, startTextLength);
      endText.value = fullText.substring(fullText.length - endTextLength);
      console.log('startText:', startText.value);
      console.log('endText:', endText.value);
    };

    onMounted(() => {
      console.log('Component mounted');
      updateText();
    });

    return {
      ellipsisContainer,
      startText,
      endText,
    };
  },
});
</script>

<style scoped>
.ellipsis-container {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-emphasis: none;
  position: relative;
  width: 500px;
  max-width: 600px;
}
</style>

二、字符串处理

就是将需字符串截取对应的字符拼接到省略号尾部。

用于提取字符串中介于两个指定下标之间的部分:str.substring(start [, end])

  1. start:必需,提取的起始下标(从0开始)。如果为负数,则会将该值视为0。
  2. end:可选,提取的结束下标(不包括此位置的字符)。如果省略,则提取到字符串结尾;如果此参数小于 start 参数,则两者会被交换;如果为负数,则会将该值视为0。
    let str = { value: 'hello world' };
    console.log(str.value.substring(0, 5)); // 输出: hello
    console.log(str.value.substring(6));   // 输出: world

<template>
  <div>
    <Ellipsis endLen="8" />
    <Ellipsis endLen="5" />
    <Ellipsis endLen="5" text="外层套一个块级(block)元素" />
    <Ellipsis endLen="10" text="外层套一个" />
  </div>
</template>

<script setup>
import Ellipsis from './Ellipsis.vue';
</script>
<template>
  <div class="flex">
    <!-- 显示截断后的文本和省略部分 -->
    <div class="truncate">{{ truncatedText }}</div>
    <div class="shrink-0">{{ endText }}</div>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';

// 定义组件的属性,包括endLen和text
const props = defineProps({
  endLen: {
    type: Number,
    default: 10,
  },
  text: {
    type: String,
    default: '外层套一个块级(block)元素外层套一个块级(block)元素外层套一个块级(block)元素外层套一个块级(block)元素',
  },
});

// 设置默认文本内容
const defaultText = '外层套一个块级(block)元素、内部是一个行内(inline)元素。给外层元素设置溢出隐藏的样式属性ne)元素。给外层元素设置溢出隐藏的样式';
// 使用ref创建响应式变量str,用于存储文本内容
const str = ref(props.text || defaultText);

// 计算截断后的文本
const truncatedText = computed(() => str.value.substring(0, str.value.length - props.endLen));
// 计算末尾的文本
const endText = computed(() => str.value.substring(str.value.length - props.endLen, str.value.length));
</script>

<style scoped lang="scss">
.flex {
  display: flex;
}

.truncate {
  overflow: hidden; // 隐藏超出容器的内容
  white-space: nowrap; // 不换行显示文本
  text-overflow: ellipsis; // 当内容超出容器时,显示省略号
}

.shrink-0 {
  flex-shrink: 0; // 确保该元素不会缩小
}
</style>

三、Css伪类

<template>
  <ul class="con">
    <li class="wrap">
      <span class="txt"> CSS 实现中间内容省略的技巧 - 2024-12-19</span>
      <span class="title" title="CSS 实现中间内容省略的技巧 - 2024-12-19">CSS 实现中间内容省略的技巧 - 2024-12-19</span>
    </li>
    <!-- 其他列表项 -->
  </ul>
</template>

<script setup>
</script>

<style scoped>
/* 容器样式 */
.con {
  font-size: 14px;
  /* 设置字体大小 */
  color: #666;
  /* 设置文字颜色 */
  width: 600px;
  /* 设置容器宽度 */
  margin: 50px auto;
  /* 设置上下外边距为50px,左右居中 */
  border-radius: 8px;
  /* 设置圆角 */
  padding: 15px;
  /* 设置内边距 */
  overflow: hidden;
  /* 隐藏溢出内容 */
  resize: horizontal;
  /* 允许水平调整大小 */
  box-shadow: 20px 20px 60px #bebebe, -20px -20px 60px #ffffff;
  /* 添加阴影效果 */
}

/* 列表项样式 */
.wrap {
  position: relative;
  /* 相对定位 */
  line-height: 2;
  /* 设置行高 */
  height: 2em;
  /* 设置高度 */
  padding: 0 10px;
  /* 设置左右内边距 */
  overflow: hidden;
  /* 隐藏溢出内容 */
  background: #fff;
  /* 设置背景色 */
  margin: 5px 0;
  /* 设置上下外边距 */
}

/* 奇数行列表项样式 */
.wrap:nth-child(odd) {
  background: #f5f5f5;
  /* 设置背景色 */
}

/* 标题样式 */
.title {
  display: block;
  /* 块级元素 */
  position: relative;
  /* 相对定位 */
  background: inherit;
  /* 继承背景色 */
  text-align: justify;
  /* 文字两端对齐 */
  height: 2em;
  /* 设置高度 */
  overflow: hidden;
  /* 隐藏溢出内容 */
  top: -4em;
  /* 向上偏移4em,可能需要根据实际情况调整 */
}

/* 文本样式 */
.txt {
  display: block;
  /* 块级元素 */
  max-height: 4em;
  /* 设置最大高度 */
}

/* 伪元素样式 */
.title::before {
  content: attr(title);
  /* 使用title属性的值 */
  width: 50%;
  /* 设置宽度 */
  float: right;
  /* 右浮动 */
  white-space: nowrap;
  /* 防止换行 */
  overflow: hidden;
  /* 隐藏溢出内容 */
  text-overflow: ellipsis;
  /* 显示省略号 */
  direction: rtl;
  /* 从右到左的方向 */
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTF — 压缩包密码爆破

CTF — 压缩包密码爆破 ​ 在CTF比赛中&#xff0c;密码爆破压缩包&#xff08;如ZIP或RAR文件&#xff09;是一个常见的任务。针对ZIP压缩包的密码爆破主要是使用工具ARCHPR完成的。这个工具的功能非常强大&#xff0c;假设你已经在Win系统里安装完这个软件了&#xff0c;打开…

Spring之我见 - 从IOC谈到AOP实现原理

前言 以前写过一篇文章&#xff0c; 专门讲了 Spring 的动态代理实现原理 从代理模式再出发&#xff01;Proxy.newProxyInstance的秘密&#xff0c; 这一次我们探究下动态代理模式比较重量级的应用 – Spring AOP 的源码实现。 本文重在讲主流程&#xff0c; 但为了让流程更清…

基于 SSM 框架 Vue 电脑测评系统:赋能电脑品质鉴定

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为一个一般的用户都开始注重与自己的信息展示平台&#xff0c;实现基于SSM框架的电脑测评系统在技术上已成熟。本文介绍了基于SSM框架的电脑测评系统的开发全过程。通过分析用户对于基于SSM框架的电脑测评系统的…

[react] 优雅解决typescript动态获取redux仓库的类型问题

store.getState()是可以获取总仓库的 先拿到函数的类型 再用ReturnType<T> 它是 TypeScript 中的一个内置条件类型&#xff0c;用于获取某个函数类型 T 的返回值类型 代码 // 先拿总仓库的函数类型type StatefuncType typeof store.getState;//再拿函数类型T的返回值类…

mysql中与并发相关的问题?

今天我们来聊聊 MySQL 中与并发相关的一些问题。作为一名资深 Python 开发工程师&#xff0c;我觉得这些问题不仅关乎数据库的稳定性和数据的一致性&#xff0c;更与我们的代码实现和业务逻辑密切相关。 尤其是在高并发环境下&#xff0c;如何保证数据的一致性&#xff0c;如何…

(补)算法刷题Day19:BM55 没有重复项数字的全排列

题目链接 给出一组数字&#xff0c;返回该组数字的所有排列 例如&#xff1a; [1,2,3]的所有排列如下 [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], [3,2,1]. &#xff08;以数字在数组中的位置靠前为优先级&#xff0c;按字典序排列输出。&#xff09; 思路&#xff1a; 使用回…

ARM嵌入式学习--第八天(PWM)

PWM -PWM介绍 PWM&#xff08;pulse Width Modulation&#xff09;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在测量&#xff0c;通信&#xff0c;工控等方面 PWM的频率 是指在1秒钟内&#xff0c;信号从…

neo4j 图表数据导入到 TuGraph

neo4j 图表数据导入到 TuGraph 代码文件说明后文 前言:近期在引入阿里的 TuGraph 图数据库&#xff0c;需要将 原 neo4j 数据导入到新的 tugraph 数据库中。预期走csv文件导入导出&#xff0c;但因为格式和数据库设计问题&#xff0c;操作起来比较麻烦&#xff08;可能是个人没…

Docker介绍、安装、namespace、cgroup、镜像-Dya 01

0. 容器简介 从生活上来说&#xff0c;容器是一种工具&#xff0c;可以装东西的工具&#xff0c;如衣柜、背包、行李箱等等。 从IT技术方面来说&#xff0c;容器是一种全新的虚拟化技术&#xff0c;它提高了硬件资源利用率&#xff0c;结合k8s还可以让企业业务快速横向扩容、业…

鱼跃医疗获评2024年国家级“绿色工厂”,以绿色制造树立行业标杆

近日&#xff0c;工业和信息化部公布了2024年度绿色制造名单&#xff0c;鱼跃医疗凭借在绿色制造和可持续发展方面的卓越表现&#xff0c;成功入选并获评国家级“绿色工厂”。 “绿色工厂”是工信部为贯彻落实国家《工业绿色发展规划》&#xff0c;加快推动绿色制造体系建设&a…

建投数据与腾讯云数据库TDSQL完成产品兼容性互认证

近日&#xff0c;经与腾讯云联合测试&#xff0c;建投数据自主研发的人力资源信息管理系统V3.0、招聘管理系统V3.0、绩效管理系统V2.0、培训管理系统V3.0通过腾讯云数据库TDSQL的技术认证&#xff0c;符合腾讯企业标准的要求&#xff0c;产品兼容性良好&#xff0c;性能卓越。 …

Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

基础入门-Web应用蜜罐系统堡垒机运维API内外接口第三方拓展架构部署影响

知识点&#xff1a; 1、基础入门-Web应用-蜜罐系统 2、基础入门-Web应用-堡垒机运维 3、基础入门-Web应用-内外API接口 4、基础入门-Web应用-第三方拓展架构 一、演示案例-Web-拓展应用-蜜罐-钓鱼诱使 蜜罐&#xff1a;https://hfish.net/ 测试系统&#xff1a;Ubuntu 20.04 …

【长城杯】Web题 hello_web 解题思路

查看源代码发现路径提示 访问…/tips.php显示无用页面&#xff0c;怀疑…/被过滤&#xff0c;采用…/./形式&#xff0c;看到phpinfo()页面 注意到disable_functions&#xff0c;禁用了很多函数 访问hackme.php,看到页面源码 发现eval函数&#xff0c;包含base64 解密获得php代…

【测试】Pytest

建议关注、收藏&#xff01; 目录 功能pytest 自动化测试工具。 功能 单元测试&#xff1a;用于验证代码的最小功能单元&#xff08;如函数、方法&#xff09;的正确性。 简单的语法&#xff1a;不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试&#xff1a;P…

Python语法之字典

免责说明&#xff1a;此内容不包含嵌套字典 关注我更新更多初学实例 字典 一.字典的应用场景 思考:数据顺序发生变化&#xff0c;每个数据的下标也会随之变化&#xff0c;如何保证数据顺序变化前后能使用同一的 标准查找数据呢&#xff1f; 答&#xff1a;字典&#xff0c…

mysql客户端命令

目录 结束符 ; \g \G 中断输入 ctrl c 查看命令列表 help ? (\?) connect (\r) status (\s) delimiter (\d) exit (\q) quit (\q) tee (\T) ​编辑 notee (\t) prompt (\R) source (\.) system (\!) ​编辑 use (\u) help contents 结束符 ; \g \G 当我…

更频繁的 Android SDK 发布:更快的创新、更高的质量和更完善

Android 一直致力于让创新更快地进入用户手中。除了每年的平台发布之外&#xff0c;我们还投资了Project Treble、Mainline、Google Play 服务、每月安全更新和季度发布&#xff0c;为 Pixel Drops 提供支持。 未来&#xff0c;Android 将更频繁地发布 SDK&#xff0c;计划于 …

蓝卓总裁谭彰:AI+工业互联网推动制造业数字化转型

近日&#xff0c;新一代工业操作系统supOS6.0在2024中国5G工业互联网大会上重磅发布。 大会期间&#xff0c;工信部新闻宣传中心《人民邮电报》对蓝卓总裁谭彰就“工业互联网人工智能技术融合的思考”“supOS6.0的探索与实践”“未来工业互联网平台的发展方向”展开专题访谈&am…

【WRF-Urban】输入空间分布人为热排放数据的WRF运行全过程总结

目录 数据准备检查新增变量配置(如果有)WPS预处理修改namelist.wpsStep1: geogridStep2: ungribStep3: metgridWRF运行修改namelist.input调试namelist.input运行./real.exe运行./wrf.exe参考WRF模型的基本流程如下: 数据准备 空间分布热排放数据下载及制备可参见另一博客…