Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery—设置元素';仅删除文本而不删除其他元素(锚定)_Javascript_Jquery - Fatal编程技术网

Javascript jQuery—设置元素';仅删除文本而不删除其他元素(锚定)

Javascript jQuery—设置元素';仅删除文本而不删除其他元素(锚定),javascript,jquery,Javascript,Jquery,我有这样一个元素: <td> <a>anchor</a> [ some text ] </td> 如果可以将文本置于跨度中: <td id='someID'> <a>anchor</a> <span>[ some text ]</span> </td> 这是我的建议。jQuery没有选择文本节点的方法 更改HTML结构将生成最简单的代码。如果无法执行此操作,

我有这样一个元素:

<td>
  <a>anchor</a>
  [ some text ]
</td>

如果可以将文本置于跨度中:

<td id='someID'>
  <a>anchor</a>
  <span>[ some text ]</span>
</td>
这是我的建议。jQuery没有选择文本节点的方法

更改HTML结构将生成最简单的代码。如果无法执行此操作,则可以使用childNodes属性查找类型3(TEXT\u NODE)的节点

下面是一些示例代码,假设最后一个节点是要编辑的节点。这是一种比替换td的全部内容更好的方法,因为在重新创建HTML时可能会丢失事件处理程序

$('a')。单击(()=>console.log('[一些文本]

更改文本而不丢失标记的处理程序
而不更改标记:

var anchor = $('td').find('a').clone();
$('td').text('{ some other text }').prepend(anchor);

您能否在javascript中确定内容是在
锚定之前还是之后?如果是,您可以设置一个变量
prepend()
append()
根据您的情况。相当复杂。是否有可能将文本包含在span中?我不确定是否理解您的问题,但您可以选择锚标记并使用.after()或.before()。我假设您有一些约定,可以让您知道锚应该出现在文本中的什么位置?如果不是您的HTML(即,这是一个greasemonkey脚本或其他东西)你可能会复制锚元素,删除TD,用你想要的填充它,然后替换锚。几乎与我发布的内容相同。我做了,但在我将我的评论添加到你的评论之后。:)否决票。这不是他所问问题的解决方案,这是一个简单的解决方案。@tfbox:简单的解决方案通常是最好的解决方案。为什么你要对HTML进行结构化,使其更难访问?这可能无法准确地回答具体问题,但确实提出了一个很好的解决方案。@JuanMendes在某些情况下,你无法控制HTML,或者它会uld导致散弹枪编辑以收集对HTML的控制:假设您使用CMS的一些标准模板,并且仅更改一小部分HTML将导致将粘贴操作复制到自定义模板中,并且可能会进行一些配置工作以将其集成。工作正常,但不是很优雅。不必要地删除a标记并将其添加回DOM。Th对DOM的更改要小得多,这是可行的,请参见我的答案
$('td#someID span').text('new text')
var anchor = $('td').find('a').clone();
$('td').text('{ some other text }').prepend(anchor);