jQuery:textarea重复字符串去重失效问题(换行场景)求助
嘿,我明白你的问题了——现在你的代码只能处理空格分隔的重复字符串,但换行分隔的就失效了对吧?问题出在你分割文本的方式上,咱们来一步步解决它。
问题根源分析
你原来用split(' ')只会按单个空格分割文本,换行符(\n)、制表符或者连续空格这些情况都不会被正确处理;另外$.unique是jQuery专门为DOM元素数组设计的方法,用来处理字符串数组可能会有意外问题(比如对大小写敏感的处理、特殊字符串的识别偏差)。
解决方案(推荐ES6版本)
下面的代码会处理所有空白符(换行、空格、制表符等),并利用ES6的Set实现稳定去重:
$(document).ready(function(){ $('button').click(function(){ var data = $('textarea').val(); // 分割所有空白字符(换行/空格/制表符等),同时过滤空字符串 var arr = data.split(/\s+/).filter(item => item.trim() !== ''); // 使用Set自动去重,再转回数组 var uniqueArr = [...new Set(arr)]; // 用空格拼接回字符串并更新文本框 data = uniqueArr.join(' '); $('textarea').val(data); }); });
关键改动说明:
split(/\s+/):\s匹配任何空白字符,+表示匹配一个或多个,不管是换行、连续空格还是制表符,都能正确分割成单个字符串元素。.filter(item => item.trim() !== ''):避免文本开头/结尾的空白导致分割出空字符串,确保数组里都是有效内容。new Set(arr):Set天生不允许重复元素,用扩展运算符[... ]把Set转回数组,就能得到完全去重的字符串列表。
兼容旧浏览器版本(不用ES6)
如果需要兼容不支持ES6的旧环境,可以用传统的遍历去重方式:
$(document).ready(function(){ $('button').click(function(){ var data = $('textarea').val(); var arr = data.split(/\s+/).filter(item => item.trim() !== ''); var uniqueArr = []; var seen = {}; // 遍历数组,用对象记录已出现的元素 for(var i = 0; i < arr.length; i++){ var item = arr[i]; if(!seen[item]){ seen[item] = true; uniqueArr.push(item); } } data = uniqueArr.join(' '); $('textarea').val(data); }); });
内容的提问来源于stack exchange,提问作者Mark Gerryl Mirandilla
相关产品推荐
相关产品推荐

