【发布时间】:2015-10-07 18:03:54
【问题描述】:
我有一些看起来像这样的 HTML:
<td class="targetTD">
<a href="http://foo.com">
<span>content</span>
</a>
**Text I want to modify**
<span>more content</span>
</td>
targetTD 迭代动态次数取决于正在呈现的内容。对于每次迭代,我需要从文本块中代码的开头删除“:”的子字符串。不幸的是,它不在它自己的元素中,我没有能力将它包装在一个整洁的 id/class 中。我做了一些搜索,发现了一些我认为可以解决问题的 js:
<script>
var myString = $('.targetTD').html();
myString = myString.replace(': ','');
$('.targetTD').html(myString);
</script>
但这会吐出一个控制台错误:
无法获取未定义或空引用的属性“替换”。
最终更新(解决方案)
感谢@Vaibhav 提出修复!这个脚本成功了:
<script type="text/javascript">
$(function() {
$('.targetTD').each(function () {
$(this).html($(this).html().replace(/\:\s/g, ''));
});
});
</script>
更新 1
感谢@BenM,我能够使用以下代码阻止错误产生:
<script>
$(function() {
$('.targetTD').html(function() { $(this).html().replace(': ', ''); });
});
</script>
虽然我现在没有收到错误消息,但这仍然没有从文本块中删除“:”。关于为什么会这样的任何想法?
更新 2
为了广泛提供一些 SharePoint 细节,以回应@ElvisLikeBear 的评论:
我要完成的具体任务是从按列表分组的列表中隐藏列名。在 SP2010 中,通过隐藏 ms-gb 类很容易做到这一点。 2013 年,Microsoft 将展开/折叠按钮与此类混为一谈,因此无法将其全部隐藏。我已经成功地隐藏了带有列名的跨度(在我上面的代码中,跨度包含在 a 中),但是“:”仍然在文本块中无济于事,现在它只是漂浮在每个类别的开头名字。
代码正在页面级别部署为 sn-p,使用脚本编辑器 Web 部件。
【问题讨论】:
-
错误表示
mystring为空。你能举一个带冒号的html的例子吗? -
您是否将 td 包含在表格和 tr 中?如果不是,那么它不是有效的 html,jquery 将无法找到它。这是您的代码的工作小提琴。唯一额外的事情是我已经将它附在 table 和 tr jsfiddle.net/4262prrs/4
-
您是否将代码包装在
document.ready中,以便在代码运行时存在元素?需要理解的重要概念 -
也将你的脚本包装在 $(document).ready(function({//Script}); 如果你还没有这样做的话,它会在所有元素加载后运行。
-
小心附加到该 HTML 的事件和数据。您将丢失它们,因为您正在删除 DOM 元素并创建具有相同内容的新元素。
标签: javascript jquery css sharepoint-2013