我有一个带有一些字符的 DIV
。每次点击 DIV
本身时,如何从文本中删除最后一个字符?
我有一个带有一些字符的 DIV
。每次点击 DIV
本身时,如何从文本中删除最后一个字符?
$("div").on("click", function(){
$(this).text(function(index, text){
return text.replace(/^.(\s+)?/, '');
});
});
$("div").on("click", function(){
$(this).text(function(index, text){
return text.replace(/(\s+)?.$/, '');
});
});
$("div").on("click", function(){
$(this).text(function(index, text){
return text.replace(/r/gi, '');
});
});
在此可以在线查看每个示例:http://jsfiddle.net/Xcn6s/
html
,因为您可能无法正确处理 <
和 &
字符,导致潜在的 XSS 安全问题。此外,如果文本的最后一个字符是 \n
,则会失败,因为 .
不能匹配换行符。 - bobince假设您已经有了对div的引用,并且它只包含一个文本节点(如您的问题所暗示的那样),那么这非常简单。以下是一个非jQuery解决方案:
div.onclick = function() {
var textNode = this.firstChild;
textNode.data = textNode.data.slice(0, -1);
};
this.firstChild.data
是您想要执行的操作吗?(OP没有表示 div 中有任何子元素,并且.data
在所有浏览器中都有效吗?)为什么不使用 this.innerHTML
? - Dan Beam<div>blah blah</div>
,这种情况下第一个(也是唯一的)子节点是一个文本节点。所有主要浏览器(包括IE版本5及以上)都支持文本节点的data
属性。与使用innerHTML
相比,它更快,因为它只需要改变一个文本属性并在文档中重新呈现它,而innerHTML
必须构建innerHTML,将其解析成DOM节点树,然后重新插入到文档中。 与innerHTML不同,data
在DOM标准中也有说明,并且在所有浏览器中都表现出统一的行为。 - Tim Downdata
是 DOM Level 1 Core,且在任何地方都非常稳定;只要确保只有一个文本节点子元素,就可以使用它。至少这个答案不允许 HTML 注入,并且不像其他大多数答案一样会卡在换行符上! - bobince<div>I <i>loved</i> it!</div>
,那么这个方法就不起作用了,因为最后一个文本节点不再是你想要处理的节点。相反,你必须获取最后一个具有节点类型3的子节点。 - Dan Beam编辑:以下是最简单的方法,不需要使用任何库依赖
function removeLastChar(node) {
var i = node.childNodes.length;
while (--i >= 0) {
if (3 === node.childNodes[i].nodeType) {
node.childNodes[i].data = node.childNodes[i].data.replace(/\S\s*$/, '');
break;
}
}
}
/\S\s*$/
仍然 表示“末尾的最后一个非空格字符”。
注意:这是从 Tim Down 的解决方案中借鉴并结合多年的 Web 开发经验得出的结论,:)
String.prototype.substr
中使用负数 http://hexmen.com/blog/2009/12/javascript-date-to-time/#li-comment-31380(链接只在FF中有效) - Dan Beamslice
而不是 substr
。 - Dan Beam<
或&
字符,它会删除&entref;
的尾部;
而不是整个字符。浏览器可能会通过重新添加;
来修复它。 - bobince除了Jonathan的答案外,如何删除第一个字符:
$("div.myDiv").click(function(){
$(this).html($(this).text().substring(1));
});
或者,删除最后一个字符:
$("div.myDiv").click(function(){
$(this).html($(this).text().replace(/.$/g, ''));
});
$("div.myDiv").click(function(){
var text = $(this).text();
var index = Math.round(Math.random() * (text.length - 1));
var result = text.substring(0, index) + text.substring(index + 1, text.length - 1);
$(this).html(result);
});
不要随机删除元素,你可以使用上述函数和预定义的索引来从特定位置删除。
每次单击div时,这将删除一个字符。如果没有更多的要求,我就无法提供更多信息。
<html>
<head>
<script>
function deleteChar(div) {
div.innerHTML = div.innerHTML.replace(/.$/, '');
}
</script>
</head>
<body>
<div onclick="deleteChar(this)">this is my div</div>
</body>
</html>
哦,抱歉,您要求的是jquery...好吧,以下是如何在纯javascript中实现。
$("#textDiv").click(function(){
$(this).html($(this).text().substring(1));
});
text
读取,写入到html
:如果有任何<
或&
字符在其中,你刚刚改变了它们的含义,并可能将不良JavaScript注入页面中。 - bobince为了补充Jonathon的回答,使用...
$("div.myDiv").click(function(){
$(this).html( $(this).text().replace("/.$/gi", "o") );
});
删除最后一个字符
纯JavaScript:
<div id="text">This is some text</div>
<script>
var node = text.firstChild;
var nodeValue = "";
var nodeValueLength = 0;
text.onclick = function () {
nodeValue = node.nodeValue;
node.nodeValue = nodeValue.substring(0, nodeValue.length - 1);
};
</script>
text
变量定义在哪里?为什么要逐个字符地构建新节点值? - Tim Downdocument.getElementById("text")
来定义text
,因为不是所有浏览器(可能只有IE)都会从它们的ID创建元素引用。另外,nodeValue.slice(0, -1)
比substring
版本更简洁。 - Tim Down通过使用 attribute$= CSS3 选择器,在 jQuery 选择中表示“以...结尾”,非常简单:
要删除第一个字符:
$("div[id$=/]").each(function(){
this.id = this.id.substr(1);
});
删除最后一个字符:
$("div[id$=/]").each(function(){
this.id = this.id.substr(0,this.id.length - 1);
});
/
结尾的 ID 的 div 与此有什么关系? - Tatu Ulmanen
<div>
的哪里删除字符?是从末尾还是开头? - Russ Cam