我需要在页面内容中注入一些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实现以及我用来计算单词的额外函数。
编辑2:使用JSFiddle,我回来的paragraphIndex总是与我提供的段落相同。理论上,当在当前段落元素的“wordSpace proximity”中找到figure或blockquote时,代码应该移动/增加段落索引。
例如,如果wordSpace变量是60,那么假设我们从第3段开始查看(paragraphIndex = 2),在第一次执行函数时,paragraphOffsetMin应为0,paragraphOffsetMax应为3,然后它应该将自己称为3作为paragraphIndex。在递归调用中,paragraphOffsetMin应为2,paragraphOffsetMax应为4,这应该是最终返回的内容。
我基本上要做的是使用它们之间使用特定的“字距”来注入元素,并且“避免阻塞引用/数字的障碍。我怀疑算法比我提供的算法更好。” / p>