Поскольку история может содержать HTML, проблема может стать очень запутанной.Следующий алгоритм вставит изображение в произвольный процент в историю и убедится, что оно не внутри тега HTML.Обратите внимание, что он жертвует эффективностью ради простоты.
Предупреждение: Этот код может по-прежнему вставлять тег изображения туда, где он не принадлежит, в зависимости от того, какой HTML-код допускает история.Например, если разрешены встроенные теги script
1 , алгоритм может иметь "забавные" эффекты.;)
См. Живую демонстрацию по адресу: jsbin.com/agimi5/3.
Предположим, история полностью внутри <div id="StoryGoesHere">
,Затем вставьте изображение, скажем:
InsertImageInStory ("StoryGoesHere", 30, "F_left", "Image URL");
Дано:
function InsertImageInStory (ContainID, PercentIn, LeftorRightClass, ImageURL)
{
var storyContainer = $("#" + ContainID);
var storyHTML = storyContainer.html ();
var storyLen = storyHTML.length;
var targetCharPos = (storyLen * PercentIn) / 100;
/*--- Now Loop through the story until we reach the target character, WHILE
making sure it isn't inside an HTML tag.
*/
for (var J = 0, bInTag = false; J < storyLen; ++J)
{
if (storyHTML.charAt(J) == '<' || storyHTML.charAt(J) == '>' )
bInTag ^= true; //-- Toggle value.
if (J < targetCharPos) continue;
/*--- We've found/passed the target position. Insert the image just as soon
as we are clear of any tags.
*/
if (!bInTag)
{
var newStory = storyHTML.substr (0, J+1);
newStory += '<img src="' + ImageURL + '" class="' + LeftorRightClass + '">';
newStory += storyHTML.substr (J+1, storyLen+1);
storyContainer.html (newStory);
break;
}
}
}
Алгоритм может быть легко преобразован в PHP, если вы предпочитаете выполнять манипуляции на стороне сервера.
1 Если разрешены встроенные теги script
, у вас все равно будут большие проблемы.