javascript - 将字符串植入 html 页面(具有挑战性)

标签 javascript jquery html

我正在尝试创建一种实现以下目标的方法: 将字符串(例如:"TEST")植入 HTML 页面的正文中,每隔一定数量的单词(例如 10 个)。由于字数统计必须在元素之间延续,这一事实使这个问题变得复杂。 例如,以下 HTML:

<body>
<h1>My Day at the Park</h1>
<p>I had a great day at the park today.</p>
<p>It was very fun, and I would like to go again soon.</p>
</body>

应该变成:

<body>
<h1>My Day at the Park</h1>
<p>I had a great dayTEST at the park today.</p>
<p>It was very fun, and ITEST would like to go again soon.</p>
</body>

因此,每 10 个单词(“day”和“I”)后插入“TEST”。第一个统计的单词是“My”,最后一个是“soon”。 一个similar question过去曾被问过,尽管这个问题没有解决元素之间连续性的重要问题(正如奥斯卡·林德伯格的评论中提到的)。

我解决此问题的(失败的)方法是通过以下过程: 1. 使用jQuery $('body').text() 获取body中的所有文本。 2. 使用 .split(' ') 创建所有单词的数组。 3. 计算并记录新数组中每 10 个单词:cutoffWords[]。 4. 计算每个截止词在其为截止词(第 10 个词)出现之前出现的次数。 5. 运行$('body').html,并在出现 chop 词时将字符串注入(inject)到 chop 词之后。

如果需要的话,我可以发布实际的代码,该代码很长,但是此方法存在一个固有的缺陷,因为当运行 $('body').html 时,元素内的文本标签也会被计算在内,因此可能会导致字符串的错误放置(或元素标签内的放置)。

作为一名 JavaScript 程序员新手,我已经束手无策,非常感谢任何建议。

最佳答案

我认为 Gerardo BLANCO 之前的回答几乎是完美的。如果你想对真正处理的元素有更多的控制(例如,如果 <script> -标 checkout 现在你的代码中,它也会被计算在内)并且如果你还想支持嵌套元素,以下可能帮助。

var validTypes = ['h1', 'p', 'div', 'span'];
var pos = 10;
var addedText = 'TEST';
var counter = 0;

var splitter = function ($el) {

    $el.contents().each(function () {
        var $innerEl = $(this);

        if (this.nodeType === Node.TEXT_NODE) {
            var text = $innerEl.text().trim();
            if (text !== '') {
                var content = text.replace(/ +/g, ' ').split(' ');
                var newText = '';
                for (var i = 0; i < content.length; i++) {
                    newText += ' ' + content[i];

                    if (++counter === pos) {
                        newText += addedText;
                        counter = 0;
                    }
                }

                this.nodeValue = newText;
            }
        } else if (this.nodeType === Node.ELEMENT_NODE && 
                   validTypes.indexOf(this.tagName.toLowerCase()) > -1) {
            splitter($innerEl);
        }
    })
};

splitter($('body'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
  <div>
    <h1>My Day at the Park</h1>
    <script>// do nothing here just ignore me</script>
    <p>I had a great day at <span style='color:red'>the</span> park today.</p>
    <p>It was very fun, and I would like to go again soon.</p>
  </div>
</body>

关于javascript - 将字符串植入 html 页面(具有挑战性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49764809/

相关文章:

javascript - 将背景应用到 ionic 侧菜单

ASP.NET 1.1 Web 服务和 jQuery

php - 如何区分两个同名的多选列表

javascript - Firebase JavaScript : Securely store a password inside the database

jquery 在 Internet Explorer 中使用多个选择器

javascript - window.open(,name) 该名称传递不起作用?

javascript - 蛇游戏弹出窗口改进和移动使用 javascript

javascript - 如何在 google map api v3 javascript 中单击 map 时获取纬度、经度?

javascript - Electron 应用程序运行时没有任何错误,但窗口未打开或显示在任务管理器中

javascript - jquery动画页面打桩