尝试编写一段 Javascript 代码,用 iFrame 替换所有 YouTube 对象标签。相反,我编写的函数将替换第一个 <object>
,然后停止并丢弃所述 <object>
之后的所有内容。
如果我使用不同的元素,例如换行符 <br>
,它将成功替换所有<object>
标签为 <br>
并且不会丢失任何内容。
function editVideoObjects(htmlContent) {
// Index all the objects and add ID tags
var objectTags = htmlContent.querySelectorAll("object");
var numberOfObjects = objectTags.length;
for (var r = 0; r < numberOfObjects; r += 1) {
objectTags[r].setAttribute("id", "video" + r)
}
for (var j = 0; j < numberOfObjects; j += 1) {
var currentObject = htmlContent.getElementById("video" + j);
var videoEmbed = currentObject.querySelector("embed");
if (videoEmbed != null) {
var videoSrc = videoEmbed.getAttribute("src");
//Script specific for YouTube videos.
if (videoSrc.split(".")[1] == "youtube") {
var newSrc = videoSrc.replace("/v/", "/embed/");
var iFrame = document.createElement("iframe");
iFrame.setAttribute("src", newSrc);
iFrame.setAttribute("height", currentObject.getAttribute("height"));
iFrame.setAttribute("width", currentObject.getAttribute("width"));
iFrame.setAttribute("frameborder", "0");
iFrame.setAttribute("allowfullscreen");
iFrame.setAttribute("id", "iFrameVideo" + j);
$(currentObject, htmlContent).replaceWith(iFrame);
}
}
}
}
最佳答案
找到解决办法了!我将该函数保存为外部文件以附加到 <head>
每当调用相应的文章时,都会将其放在主 DOM 中,而不是嵌套在主 Javascript 文件中。
function itemInvoked(e) {
var currentArticle = articlesList.getAt(e.detail.itemIndex);
WinJS.Utilities.setInnerHTMLUnsafe(articlecontent, currentArticle.content);
var videoScript = document.createElement("script");
videoScript.type = "text/javascript";
videoScript.src = "/js/videoEditScript.js"
document.getElementsByTagName("head")[0].appendChild(videoScript);
articlelist.style.display = "none";
articlecontent.style.display = "";
mainTitle.innerHTML = currentArticle.title;
WinJS.UI.Animation.enterPage(articlecontent);
}
关于javascript - 用 iFrame 替换所有对象标签 - 第一次替换后停止 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13573924/