如何解决jQuery-仅设置元素的文本而不删除其他元素锚
| 我有一个像这样的元素:<td>
<a>anchor</a>
[ some text ]
</td>
而且我需要在jQuery中设置文本,而无需删除锚点。
元素的内容可以按顺序变化(之前或之后的文本),实际的文本是未知的。
谢谢
新更新
这是我想使用的,假设仅一个文本节点:
function setTextContents($elem,text) {
$elem.contents().filter(function() {
if (this.nodeType == Node.TEXT_NODE) {
this.nodeValue = text;
}
});
}
setTextContents( $(\'td\'),\"new text\");
解决方法
尼尔的回答是我的建议。 jQuery没有选择文本节点的方法如何使用jQuery选择文本节点?
更改HTML结构将使代码最简单。如果您无法执行此操作,则可以使用childNodes属性查找类型3(TEXT_NODE)的节点
这是一些示例代码,假定最后一个节点是您要编辑的节点。这比替换td的全部内容更好,因为重新创建HTML时可能会丢失事件处理程序。
$(\'a\').click(() => console.log(\'<a> was clicked\'))
$(\'#btn\').click(() =>
$(\'.someClass\').get(0).lastChild.nodeValue = \" New Value\");
<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js\"></script>
<div class=\'someClass\'>
<a href=\"javascript:void(0)\">anchor</a> [ some text ]
</div>
<button id=\'btn\'> Change text without losing a tag\'s handler</button>
, 如果可以将文本放在跨度中:
<td id=\'someID\'>
<a>anchor</a>
<span>[ some text ]</span>
</td>
你可以做:
$(\'td#someID span\').text(\'new text\')
, 不更改标记:
现场演示
var anchor = $(\'td\').find(\'a\').clone();
$(\'td\').text(\'{ some other text }\').prepend(anchor);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。