2009-06-15 5 views
0

document.execCommand ('SaveAs', false, 'fileName' + ".txt");document.execCommand ..SaveAs проблема со скрытыми элементами.,

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

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

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

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

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

Спасибо, Бен

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

+0

Являются ли правила css встроенными или заданы атрибутом class/id? Пример кода поможет. –

+0

Это в некоторой внутренней среде только IE? Обычный JavaScript не должен давать разработчику такой вид доступа/контроля над ПК конечных пользователей. – scunliffe

+0

@scunliffe: Да, это только для IE.I согласен, что есть некоторые проблемы с безопасностью, но прямо сейчас, не беспокоясь об этом. @Ian: Я не думаю, что это действительно имеет значение. Его встроенный, но я могу изменить его на класс. – Ben

ответ

1

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

Clone документ, а затем удалить все узлы с именем класса, который определяет его как скрытый, или как содержание, которое вы не хотите спастись. В моем случае я использовал имя класса «hidden». 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

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

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

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

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

+0

Хороший пользовательский интерфейс. В идеале пользователь должен сохранять то, что показано на странице, а не скрытый контент. Его действительный сценарий. – Ben

Смежные вопросы