document.execCommand .. Сохранить как проблема со скрытыми элементами., - PullRequest
0 голосов
/ 16 июня 2009

document.execCommand ('SaveAs', false, 'fileName' + ".txt");

Я пытаюсь сохранить страницу в файл, используя приведенную выше команду в JavaScript.

Проблема: у меня есть некоторые скрытые элементы на странице. Стиль CSS [display: none], поэтому, когда я пытаюсь сохранить содержимое страниц с помощью вышеуказанной команды, он также записывает содержимое скрытых элементов.

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

Любая помощь приветствуется.

PS: я не хочу удалять содержимое скрытых элементов из DOM. Это не вариант.

Спасибо, Бен

Есть ли у кого-нибудь еще ответы ..

Ответы [ 2 ]

1 голос
/ 16 июня 2009

Вот что я придумал

Клонируйте документ, затем удалите все узлы с именем класса, которое определяет его как скрытый или как содержимое, которое вы не хотите сохранять. В моем случае я использовал имя класса «скрытый». removeElementsByClass проходит через клонированный документ и удаляет все поврежденные узлы. Теперь запустите exec для объекта newDoc, сохранив этот клонированный и сокращенный документ.

var newDoc = document.getElementsByTagName("html")[0].cloneNode(true);
removeElementsByClass(newDoc, 'hidden');
newDoc.execCommand('SaveAs', false,'fileName' + ".txt");

function removeElementsByClass(object, class)
{
    var elementArray  = [];
    if (object.all)
    {
        elementArray = object.all;
    }
    else
    {
        elementArray = object.getElementsByTagName("*");
    }

    var matchedArray = [];
    var pattern = new RegExp("(^| )" + class + "( |$)");

    for (var i = 0; i < elementArray.length; i++)
    {
        if (pattern.test(elementArray[i].className))
        {
                elementArray[i].parentNode.removeChild(elementArray[i]);
        }
    }
}
0 голосов
/ 16 июня 2009

Не проверено ... но моя единственная мысль была бы:

  • завернуть звонок ...
  • сохранить переменную с "чистой" копией всего DOM ...
  • убрать скрытые элементы, например removeChild () где отображение: ни один не установлен
  • выполнить сохранение
  • сбросить DOM к исходному

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

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

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