无论如何要删除所有<a href=""> tags with javascript after the page loads on an iPad?</a>

时间:2010-07-09 21:56:56

标签: javascript iphone html ipad uiwebview

我知道在使用UIWebView(我正在使用的)在iPad上加载页面后,我可以运行一行javascript代码,但我不知道我可以输入什么来删除所有标签。我还希望能够仅对页面的某些部分执行此操作,例如只删除某个标记内的标记。

4 个答案:

答案 0 :(得分:8)

您可以使用document.getElementsByTagName()按标记名称获取所有元素。所有链接都标记为a。您可以通过将display样式设置为none来直观地删除它们。

var elements = document.getElementsByTagName('a');
for (var i = 0; i < elements.length; i++) {
    elements[i].style.display = 'none';
}

要删除某个标记内某个标记的元素,只需在相关元素上调用getElementsByTagName()即可。假设您只想隐藏<li>内的所有链接:

var listitems = document.getElementsByTagName('li');
for (var i = 0; i < listitems.length; i++) {
    var anchors = listitems[i].getElementsByTagName('a');
    for (var j = 0; j < anchors.length; j++) {
        anchors[j].style.display = 'none';
    }
}

element.parentNode.removeChild(element)也很好,但它在标准for循环中不能很好地工作。您需要循环向后

var elements = document.getElementsByTagName('a');
for (var i = elements.length; i-- > 0;) {
    var element = elements[i];
    element.parentNode.removeChild(element);
}

根据明确的功能要求

更新:您是否希望用表示链接原始内容的文本节点替换链接元素?您可以使用Node.replaceChild()。这是一个启动示例:

var elements = document.getElementsByTagName('a');
for (var i = elements.length; i-- > 0;) {
    var element = elements[i];
    var text = document.createTextNode(element.firstChild.nodeValue);
    element.parentNode.replaceChild(text, element);
}

答案 1 :(得分:0)

以为我会发布一个remove()函数来补充BalusC:

function remove(el){
   if(el.parentNode)el.parentNode.removeChild(el);
}

注意:如果元素没有父元素,则表示它不在DOM树中。 这也意味着它将在下一次运行的GC(垃圾收集器)中被删除(只要没有对它的引用)。

答案 2 :(得分:0)

如果你要进行大量的dom操作,那么包含jQuery来抓取你的元素可能是值得的。删除项目会更容易一些。例如

$(function(){
   $('.surrounding_class a').remove();
});

答案 3 :(得分:0)

如果您想删除链接但保留其显示内容(文本,图片等),您可以在链接前插入childNodes,然后删除链接元素:

var removeLinks = function(context) {
    var undefined;
    if(context === undefined) {
        context = document;
    }
    if(!context) {
        return false;
    }
    var links = context.getElementsByTagName('a'), i, link, children, j, parent;
    for(i = 0; i < links.length; i++) {
        link = links[i];
        parent = link.parentNode;
        if(!link.href) {
            continue;
        }

        children = link.childNodes;
        for(j = 0; j < children.length; j++) {
            parent.insertBefore(children[j], link);
        }
        parent.removeChild(link);
    }
    return context;
};

// Use:
removeLinks(document.getElementById('container'));