В любом случае, чтобы удалить все теги с JavaScript после загрузки страницы на iPad? - PullRequest
2 голосов
/ 10 июля 2010

Я знаю, что могу запустить строку кода javascript после загрузки страницы на iPad с помощью UIWebView (что я и использую), но я не знаю, что можно набрать, чтобы пройти и удалить все теги,Я также хотел бы иметь возможность делать это только для определенных частей страницы, например, удалять только теги в пределах определенного тега.

Ответы [ 4 ]

8 голосов
/ 10 июля 2010

Вы можете получить все элементы по имени тега, используя 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);
}
0 голосов
/ 10 июля 2010

Если вы хотите удалить ссылки, но сохранить их отображаемое содержимое (текст, изображения и т. Д.), Вы можете вставить их 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'));
0 голосов
/ 10 июля 2010

Если вы собираетесь много манипулировать домом, возможно, стоит включить jQuery для захвата ваших элементов. Было бы немного легче удалить предметы. Например.

$(function(){
   $('.surrounding_class a').remove();
});
0 голосов
/ 10 июля 2010

Думаю, что я добавлю функцию remove () для дополнения BalusC:

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

Примечание. Если элемент не имеет родителя, это означает, что его нет в дереве DOM. Это также означает, что он будет удален при следующем запуске GC (сборщика мусора) (если на него нет ссылок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...