我正在尝试将逗号分隔的列表注入到 DOM 中,用户可以将其复制并粘贴到另一个应用程序中。现在我完全被困在如何处理前面没有逗号的第一个元素上。
现在,用户单击一个元素,jquery 获取该元素的 ID 以构建列表。用户应该能够打开和关闭他们的选择。我还需要按照用户选择项目的顺序生成列表。
HTML
Comma separated list here: <span id="list"></span>
<br />
<a id="1" class="clickme" href="#"><li>One</li></a>
<a id="2" class="clickme" href="#"><li>Two</li></a>
<a id="3" class="clickme" href="#"><li>Three</li></a>
<a id="4" class="clickme" href="#"><li>Four</li></a>
<a id="5" class="clickme" href="#"><li>Five</li></a>
<a id="6" class="clickme" href="#"><li>Six</li></a>
CSS
.selected {
background-color: #99CCFF;
}
JS - 加载 jquery
$('.clickme').click(function (e) {
e.preventDefault();
var book_id = $(this).attr('id');
$(this).children('li').toggleClass("selected");
var list_container = $("#list");
if ($(this).children('li').is(".selected")) {
if (list_container.text().length > 0) {
list_container.append("," + book_id);
} else {
list_container.append(book_id);
}
} else {
list_container.text(list_container.text().replace("," + book_id, ""));
}
});
这非常适合构建逗号分隔的列表,并且非常适合关闭列表中除第一个值之外的所有值。问题是插入的第一个值没有前面的逗号,因此替换函数无法匹配它。如果我从替换函数中删除逗号,那么我会留下一堆不需要的逗号。如果我两者都匹配,那么我冒着匹配 ID 的一部分的风险......即在 3 关闭时替换 13 中的 3。
我尝试了很多变化,但找不到任何有效的方法。
产生预期结果的唯一解决方案是使用 CSS 注入逗号并用 span 元素包装注入的 ID。
CSS 技巧
#list span { display: inline; }
#list span:after { content: ","; }
#list span:last-child:after { content: ""; }
工作得很好......除了这个的实际目的。我需要用户能够复制和粘贴生成的字符串。当您使用 CSS 生成内容时,大多数浏览器中的 DOM 级剪贴板都看不到它。IE 复制了您在浏览器中看到的字符串,FF 和 Safari 都复制了没有附加 CSS 逗号的字符串。