Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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:查找文本并替换为HTML_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript jQuery:查找文本并替换为HTML

Javascript jQuery:查找文本并替换为HTML,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我尝试查找和替换文本(使用jQuery)。实际上,我试图在文本周围添加一个span元素。我也应该能够删除跨度再次没有丢失的文本内 例如,假设我从以下情况开始: <span>This is a span element</span> 这是一个跨度元素 我希望能够使用jQuery/JavaScript动态地实现这一点: <span>This is a <span class="marked">span</span> element<

我尝试查找和替换文本(使用jQuery)。实际上,我试图在文本周围添加一个span元素。我也应该能够删除跨度再次没有丢失的文本内

例如,假设我从以下情况开始:

<span>This is a span element</span>
这是一个跨度元素
我希望能够使用jQuery/JavaScript动态地实现这一点:

<span>This is a <span class="marked">span</span> element</span>
这是一个跨度元素
我还应该能够删除span.marked并返回到第一个结果

但问题是,我想对容器中包含多个子项和子项的所有文本执行此操作,以此类推

到目前为止,我得到的代码将执行以下操作,这不是我想要的:

<<span class="marked">span</span>>This is a <span class="marked">span</<span class="marked">span</span> element</span>
这是一个span尝试使用以下方法:

$('.container').forEach(function(){ 
    $(this).html().... 
})
如果这是你的问题,那就是。否则,请澄清,到底是什么工作不正常?

var span=document.getElementsByTagName(“span”)[0];
var span = document.getElementsByTagName("span")[0];
span.innerHTML = span.innerHTML.replace(/span/g, "<span class=\"marked\">span</span>");
span.innerHTML=span.innerHTML.replace(/span/g,“span”);

要在html中包装搜索字符串,可以使用以下内容:

$('span:contains("word")').html().replace('word', '<span class="marked">word</span>');
$('span:contains("word")').html().replace('<span class="marked">word</span>', 'word');
$('span:contains("' + str + '")').html().replace(str, '<span class="marked">' + str + '</span>');
$('span:contains("' + str + '")').html().replace('<span class="marked">' + str + '</span>', str);
$('span:contains(“word”)).html().replace(“word”,“word”);
要删除它,您可以使用以下方法:

$('span:contains("word")').html().replace('word', '<span class="marked">word</span>');
$('span:contains("word")').html().replace('<span class="marked">word</span>', 'word');
$('span:contains("' + str + '")').html().replace(str, '<span class="marked">' + str + '</span>');
$('span:contains("' + str + '")').html().replace('<span class="marked">' + str + '</span>', str);
$('span:contains(“word”)).html().replace(“word”,“word”);
是的,这是一个相当粗糙的方法,但它应该工作

编辑: 正如@user3558931所指出的,这个词需要是一个变量


要在html中包装搜索字符串,可以使用以下内容:

$('span:contains("word")').html().replace('word', '<span class="marked">word</span>');
$('span:contains("word")').html().replace('<span class="marked">word</span>', 'word');
$('span:contains("' + str + '")').html().replace(str, '<span class="marked">' + str + '</span>');
$('span:contains("' + str + '")').html().replace('<span class="marked">' + str + '</span>', str);
$('span:contains(“+str+”)).html().replace(str,“+str+”);
要删除它,您可以使用以下方法:

$('span:contains("word")').html().replace('word', '<span class="marked">word</span>');
$('span:contains("word")').html().replace('<span class="marked">word</span>', 'word');
$('span:contains("' + str + '")').html().replace(str, '<span class="marked">' + str + '</span>');
$('span:contains("' + str + '")').html().replace('<span class="marked">' + str + '</span>', str);
$('span:contains(“+str+”)).html().replace(“”+str+“”,str);
编辑:
上面的代码中有一个小问题,请参阅本手册中的固定代码:

我认为需要调整正则表达式,以便它不会拾取
var-mark=function(word){
返回函数(){
this.innerHTML=this.innerHTML.replace(word,+word+);
}
};

$('span')。每个(标记('span')) 不要使用正则表达式。使用DOM遍历,它将更可靠、更快、破坏性更小(例如,事件处理程序不会被破坏)

有关简单示例,请参见

或者,您可以使用以下选项:

$('.container').forEach(function(){ 
    $(this).html().... 
})

这并不包括事后拆除跨度,但这是一件相当简单的事情。类似以下内容(未经测试):

函数替换为自己的子项(el){
var parent=el.parentNode;
while(el.hasChildNodes()){
父项插入前(el.firstChild,el);
}
父母。远程儿童(el);
}
//创建非活动的标准跨距阵列
var span=[].slice.call(document.getElementsByTagName(“span”),0);
对于(变量i=0,len=span.length;i
$('.container p')。每个(函数(){
var text=$(this.text();
$(this.html(text.replace('word','word);
});

向您展示JS代码。在您的最后一行代码中,我看到了您的第一行span=“marked”。这是打字错误还是?您可以在“span”之前和之后搜索带有空格的“span”字,而不仅仅是“span”。所以您的
span
元素将不会被替换。@VDesign这就是他遇到的问题。他的代码用
将“span”封装在现有的
标记中。我有一个有效的解决方案。请看下面我的答案。它不仅是span元素,而且是我试图修改的整个页面。像这样:好吧,那么,你似乎有你自己的解决方案,从我的。你的错在哪里?它也取代了html标签。它应该只将文本替换为html标记和文本。尝试这个简单的修复方法:我所做的只是在替换中的单词前添加一个空格,然后在替换它的html中添加空格。它不优雅,但很有效。当我需要标记元素的第一个单词时,它会出现问题。但它越来越接近我需要的了,这行不通。Per PO
word
是一个变量,不是字符串。抱歉,我将更新代码,我认为原始问题是在我回答后更新的。这仅适用于span标记?我正在尝试对容器中的所有嵌套标记执行此操作。我试过你的代码,比如$('*:contains(..),但那似乎不起作用。是的,那段代码是针对span标记的。要使用选择器类实现这一点,你可以使用类似$('.container').html()的代码很抱歉,该代码中有一个小故障。首先,您必须将数据存储到变量中,然后应用它。请查看此提琴:我的HTML有点复杂: