我正在尝试像SO一样创建一个标记系统。 我添加了标签,现在我想删除它们。
MyQuestion:
var tags = [];
$("#textBox").keypress(function (e) {
if (e.which === 13) {
$(".target").append("<a href='#' class='tag' >" + this.value+'<span class="cross" onclick="remove_tag()">X</span>'+ "</a>");
function remove_tag(){
//what to do here?
}
tags.push(this.value);
this.value = "";
}
});
答案 0 :(得分:2)
这是我的JSFiddle:http://jsfiddle.net/Wky2Z/11/
基本上,聆听要点击的.cross
,然后从数组中移除和删除元素
//enter something in textbox and press enter....
var tags = [];
$("#textBox").keypress(function (e) {
if (e.which === 13) {
$(".target").append("<a href='#' class='tag' >" + this.value+'<span class="cross">X</span>'+ "</a>");
tags.push(this.value);
this.value = "";
}
});
$('body').on('click','.cross',function(){
tags.splice($(this).parent('a').html(), 1);
$(this).parent('a').remove();
});
至于十字架的外观,SO使用CSS Sprite,所以你可以通过制作两个状态的png或gif或jpeg,关闭(灰色)和悬停(红色)来切换{{ 1}}用css红色,例如:background-position
答案 1 :(得分:1)
您可以删除使用remove()
的元素。
另外,我建议您使用jQuery事件而不是使用内联事件。 (如果你看一下stackoverflow的源代码,你会注意到没有内联的javascript调用)
在这种情况下,您需要向document
对象添加一个事件处理程序,因为您希望将事件分配给从一开始就未加载到DOM中的元素。
$(document).on('click', '.tag span', function(){
$(this).parent().remove();
});
活生生的例子:http://jsfiddle.net/Wky2Z/7/
我更新了从标签列表中删除元素的示例: http://jsfiddle.net/Wky2Z/8/
为标记链接添加了data-value
:
$(".target").append("<a href='#' class='tag' data-value='" + this.value + "' >" + this.value+'<span class="cross">X</span>'+ "</a>");
修改了点击事件:
$(document).on('click', '.tag span', function(){
$(this).parent().remove();
var removeItem = $(this).parent().data('value');
tags = $.grep(tags, function(value) {
return value != removeItem;
});
});
答案 2 :(得分:1)
对于完整的jQuery解决方案,您可以删除内联remove_tag
函数并使用jQuery on
函数。它也适用于动态创建的元素。
将一个或多个事件的事件处理函数附加到 选定的元素。
在这里,您可以使用remove
获取已删除元素的父元素并将其从DOM中删除。
要将数组与当前情况“同步”,您可以使用grep
从数组中删除该项目;请注意removedItem
变量用于仅获取父文本,不包括文本中的子项。
代码:
//enter something in textbox and press enter....
var tags = [];
$(document).ready(function () {
$('body').on('click', 'span.cross', function () {
var removedItem = $(this).parent().contents(':not(span)').text();
$(this).parent().remove();
tags = $.grep(tags, function (value) {
return value != removedItem;
});
});
$("#textBox").keypress(function (e) {
if (e.which === 13) {
$(".target").append("<a href='#' class='tag' >" + this.value + '<span class="cross">X</span>' + "</a>");
tags.push(this.value);
this.value = "";
}
});
});
答案 3 :(得分:0)
以下是更新的链接:http://jsfiddle.net/Wky2Z/6/
将remove_tag
移到keypress事件句柄之外,并将this
指针传递给它以便快速解决:
//enter something in textbox and press enter....
var tags = [];
function remove_tag(x) {
$(x).parent('a').remove();
}
$(function () {
$("#textBox").keypress(function (e) {
if (e.which === 13) {
$(".target").append("<a href='#' class='tag' >" + this.value + '<span class="cross" onclick="remove_tag(this)">X</span>' + "</a>");
tags.push(this.value);
this.value = "";
}
});
});