使用jQuery注入div,同时保持与特定元素的字距

时间:2016-06-12 11:42:03

标签: javascript jquery algorithm

我需要在页面内容中注入一些div(包含指向站点中其他文章的链接)。注入这些div的规则非常棘手:

  • 他们需要经常在段落之后注入。
  • 在第一次注入div之前需要有最少量的单词。
  • 在之前注入的div之前需要最少量的单词和现在正在插入的单词。
  • 当前注入的div与内容中的某些特定元素之间需要最少量的单词。

我创建了一个功能,希望做上面提到的事情,看起来像这样:

  function elementProximityCheck(paragraphOffset, wordSpace, elSelector) {

    var elementsToCheck = ['figure', 'blockquote'];
    var wordCounter, paragraphOffsetMin, paragraphOffsetMax;

    wordCounter = 0;
    paragraphOffsetMin = paragraphOffset-1;
    do {
      wordCounter += numOfWords(paragraphOffsetMin, elSelector);
      paragraphOffsetMin -= 1;
    } while (wordCounter < wordSpace);

    wordCounter = 0;
    paragraphOffsetMax = paragraphOffset;
    do {
      wordCounter += numOfWords(paragraphOffsetMax, elSelector);
      paragraphOffsetMax += 1;
    } while (wordCounter < wordSpace);

    $(elSelector).slice(paragraphOffsetMin, paragraphOffsetMax + 1).each(function () {
      for (var elementIndex = 0; elementIndex < elementsToCheck.length; elementIndex++) {
        if ($(this).is(elementsToCheck[elementIndex])) {
          paragraphOffset = elementProximityCheck(paragraphOffsetMax, wordSpace, elSelector);
          return false;
        }
      }
    });

    return paragraphOffset;
  }

在我确定满足上述第二个条件的第一个段落后调用此函数。

主要思想是我向前和向前搜索elementsToCheck数组的元素,如果找到这样的元素,该函数将使用新的段落索引递归调用自身(这是我用作绑定的段落)上一次执行)。

问题是这件事不起作用,我无法弄清楚原因。任何见解(或替代解决方案)都将受到高度赞赏。

编辑:

下面你可以找到我的代码的JSFiddle实现以及我用来计算单词的额外函数。

JSFiddle Example

编辑2:使用JSFiddle,我回来的paragraphIndex总是与我提供的段落相同。理论上,当在当前段落元素的“wordSpace proximity”中找到figure或blockquote时,代码应该移动/增加段落索引。

例如,如果wordSpace变量是60,那么假设我们从第3段开始查看(paragraphIndex = 2),在第一次执行函数时,paragraphOffsetMin应为0,paragraphOffsetMax应为3,然后它应该将自己称为3作为paragraphIndex。在递归调用中,paragraphOffsetMin应为2,paragraphOffsetMax应为4,这应该是最终返回的内容。

我基本上要做的是使用它们之间使用特定的“字距”来注入元素,并且“避免阻塞引用/数字的障碍。我怀疑算法比我提供的算法更好。” / p>

0 个答案:

没有答案