Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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 如何修改文本块中的内容_Javascript_Jquery_Css_Sharepoint 2013 - Fatal编程技术网

Javascript 如何修改文本块中的内容

Javascript 如何修改文本块中的内容,javascript,jquery,css,sharepoint-2013,Javascript,Jquery,Css,Sharepoint 2013,我有一些HTML如下所示: <td class="targetTD"> <a href="http://foo.com"> <span>content</span> </a> **Text I want to modify** <span>more content</span> </td> 但这就引出了一个控制台错误: 无法获取未定义或空引用的属性“replace” 最终更新

我有一些HTML如下所示:

<td class="targetTD">
  <a href="http://foo.com">
    <span>content</span>
  </a>
  **Text I want to modify**
  <span>more content</span>
</td>
但这就引出了一个控制台错误:

无法获取未定义或空引用的属性“replace”

最终更新(解决方案) 感谢@Vaibhav提供了修复方案!这个脚本成功了:

<script>
var myString = $('.targetTD').html();
myString = myString.replace(': ','');
$('.targetTD').html(myString);
</script>

$(函数(){
$('.targetd')。每个(函数(){
$(this.html($(this.html().replace(/\:\s/g');
});
});
更新1 感谢@BenM,我能够通过使用以下代码阻止错误的产生:


$(函数(){
$('.targetd').html(函数(){$(this.html().replace(':','');});
});
虽然我现在没有收到错误消息,但这仍然没有从文本块中删除“:”。你知道为什么会这样吗

更新2 要提供一些SharePoint详细信息,请回复@ElvisLikeBear的评论:

  • 我试图完成的具体任务是从分组列表中隐藏列名。在SP2010中,隐藏ms gb类很容易做到这一点。2013年,微软将扩展/折叠按钮与该类混为一谈,因此不可将其全部隐藏。我已经成功地用列名隐藏了span(在上面的代码中,span被包装在a中),但是“:”仍然在文本块中,没有任何帮助,现在它只是浮动在每个类别名称的开头

  • 正在使用脚本编辑器web部件将代码作为片段部署在页面级别


确保DOM已准备就绪:

<script>
$(function() {
    $('.targetTD').html(function() { $(this).html().replace(': ', ''); });
});
</script>

$(函数(){
$('.targetd').html(函数(){$(this.html().replace(':','');});
});

您的标记表示这是在SharePoint网站上执行的,这就是您的代码未触发的原因。您需要为SharePoint正确部署它

您可以在解决方案或功能中执行此操作,或者如果是单页脚本,则应使用脚本web部件(在SharePoint 2010和2007中称为内容编辑器web部件),也可以在SharePoint 2013中向页面添加代码段


您也可以通过将脚本添加到标记中,但我不认为这是最佳做法,除非在某些非常特定的场景中(但对于非SharePoint开发人员来说,这是最简单的方法)。

Brendan,您的代码的问题是您将“:”替换为“”,但您不会再次将其分配给相同的td

Replace(“:”,“”)
函数只替换第一次出现的“:”。请遵循我的代码。它将用“”替换所有“:”

参考“targetd根据呈现的内容动态迭代次数”

我假设您需要foreach循环来迭代所有Tds

Html:-

<table>
    <tr>
        <td class="targetTD">
            <a href="http://foo.com">
                <span>content</span>
            </a>
            Test:Test1
            <span>more content</span>
        </td>
    </tr>
    <tr>
        <td class="targetTD">
            <a href="http://foo.com">
                <span>content</span>
            </a>
            Test:Test1:test2
            <span>more content</span>
        </td>
    </tr>
    <tr>
        <td class="targetTD">
            <a href="http://foo.com">
                <span>content</span>
            </a>
            Test:Test1:test3:test4
            <span>more content</span>
        </td>
    </tr>
</table>

测试:测试1
更多内容
测试:测试1:测试2
更多内容
测试:测试1:测试3:测试4
更多内容
Jquery:-

<script type="text/javascript">

    $(function() {
        $('.targetTD').each(function () {
            $(this).html($(this).html().replace(/\:/g, ''));
        });
    });
    </script>

$(函数(){
$('.targetd')。每个(函数(){
$(this.html($(this.html().replace(/\:/g');
});
});

脚本经过测试,工作正常。

错误意味着
mystring
为空。你能给出一个带有冒号的html的例子吗?你把td括在一个表中了吗??如果不是,则它不是有效的html,jquery将无法找到它。这里有一个工作小提琴与您的代码。唯一额外的事情是,我已经将它包含在表中,tr您正在将代码包装到
文档中。准备好了吗
所以元素在代码运行时存在?要理解的重要概念是将脚本包装在$(document).ready(函数({//script})中;如果尚未加载所有元素,则会在加载所有元素后运行。请小心附加到该HTML的事件和数据。您将丢失这些事件和数据,因为您正在删除DOM元素并创建具有相同内容的新元素。谢谢BenM!我没有发现此脚本的错误,但它也不会像我希望的那样替换文本。还有其他想法吗?@BenM遗憾的是,鉴于SharePoint自身内容的执行顺序,这在SharePoint中不起作用hi@ElvisLikeBear-感谢您的评论。这实际上是作为脚本编辑器web部件中的一个片段部署的。我正在尝试覆盖默认的SharePoint行为,即插入“(列名):”在按列表分组的特定类别之前,但不是在所有页面上。2010年,文本被方便地包装在ms gb类中,但在2013年,用CSS隐藏该类现在也隐藏了展开/折叠按钮。谢谢@Vaibhav!这几乎可以起作用。它成功地删除了文本框中的:,但也删除了
标记并断开该链接。我成功地删除了有问题的“:”并通过将替换函数中的正则表达式更改为/\:\s/g来避免断开a标记。再次感谢!!