关于javascript:在找到的字符串后面注入HTML并保留原始HTML

Inject HTML behind found string and preserve original HTML

我需要在保留原始HTML的同时将一些HTML注入到文本中。不管是用JavaScript还是用PHP。

举个例子。基础测试:

1
2
3
Die geis-tes– und sozi-al-wis-sen-schaft-li-che
Aus-ein-an-der-set-zung mit Human Enhan-ce-ment hat erneut zu
Debat-ten über den Sta-tus des Men-schen als Cyborg geführt.

然后我得到了和HTML剥离字符串相同的东西。搜索字符串:

1
2
3
Die geis-tes– und sozi-al-wis-sen-schaft-li-che
Aus-ein-an-der-set-zung mit Human Enhan-ce-ment hat erneut zu
Debat-ten über den Sta-tus des Men-schen als Cyborg geführt.

我可以通过第二个字符串进行搜索,但需要在第一个字符串后面插入一些HTML。结果:

1
2
3
Die geis-tes– und sozi-al-wis-sen-schaft-li-che
Aus-ein-an-der-set-zung mit Human Enhan-ce-ment hat erneut zu
Debat-ten über den Sta-tus des Men-schen als Cyborg geführt.<span>1</span>

不是那么容易…:)我可以通过regex和jquery的.text()函数查找和替换字符串。但这并不能保留原始的HTML。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$string ="I want to add before this element";
function Add($add, $before, $in_content)
    {
        $p = strpos($in_content, $before, 0);
        if ($p !== false)
           return substr_replace( $in_content , $add , $p, 0 );
        else
           return false;
    }

    $result = Add("paragraph","this",$string);
    if($result !== false)
        echo $result;
?>

您需要从HTML DOM或数据库或文件中获取文本吗?

javascript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
I want to add before this element


var text_content = document.getElementById("content").innerText;
function Add(add, before, in_content)
    {
        var p = in_content.indexOf(before);
        if (p !== -1)
            return [in_content.slice(0, p), add, in_content.slice(p-1)].join('');
        else
            return false;

    }

    var result = Add("paragraph","this",text_content);
    if(result !== false)
        document.getElementById("content").innerText = result;


我可以通过用regex修改搜索语句来解决这个问题。将所有空格替换为

1
\s*?(?:<\/?[^>]*?>)?\s*?

示例:https://regex101.com/r/ni0vy7/1


PHP:strpos+针的长度,以得到它在字符串中的结束位置作为$index,然后substr替换($string,$insertion,$index,0);