В IE можно выбрать скрытый текст, несмотря на то, что style='display:none'

Похоже, что это особенность IE. Я тестировал с помощью IE8. Пользователь John Hвнес свой вклад, подтвердив в IE6 и IE7.

У меня есть некоторый текст, который встраивается в мою страницу, и с самого начала создания элемента он имеет style = "display: none;"

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

Однако, если пользователь выбирает текст рядоммой элемент display:noneи копирует то, что было выделено, скрытый текст включается.Так же, как если бы он отображался нормально.

Разметка выглядит следующим образом:

...

    Text they should see
    
    Some other text

Вот скрипка, где я могу воспроизвести проблему, используя IE

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

Большинство других вопросов, которые я видел относительно display:none, не отображали содержание своих плакатов. Опять же, мой контент практически невидим до тех пор, покаон не будет выбран, скопирован и, наконец, вставлен.

Можно ли запретить пользователям Internet Explorer находить этот контент путем копирования/вставки? Я понимаю, что они могли видеть это в инструментах разработчика и просмотрев исходный код.

Обновление: благодаря комментариям других пользователей, я также попытался применить стиль visibility:hiddenи z-index=-1. Пользователь John Hпредпринял множество других попыток сокрытия, но IE пока упорно не позволяет этой функции проскользнуть. Спасибо за все отличные идеи!

Обновление:Спасибо за вопрос Хизер Уолтерс; значения, которые мне нужно использовать на странице, доступны только на стороне сервера, но затем я использую их после загрузки страницыдля создания ссылки с использованием дополнительной обработки из внешней программы через jQuery/AJAX. Поэтому я создаю страницу со скрытыми, но включенными значениями, а затем работаю с этими скрытыми значениями, чтобы создать из них что-то полезное.

Как только я закончу использовать их для создания чего-то полезного, я теперь понимаю, что могу стереть их все с помощью jQuery и получить дополнительный удар по производительности. Следующий код сделает это для всех, у кого включен JavaScript:

$("[id^=whateverButUnique]").html("");

Поскольку на странице могут быть сотни элементов, эта дополнительная обработка не идеальна.

vega, я не думаю, что это решениемне подойдет, потому что мне нужно создать страницу и мой скрытый контент на стороне сервера. Все они построены в цикле на стороне сервера с потенциально сотнями других элементов, поэтому у меня есть выбор: либо построить его на месте, пока сервер размещает все в таблице (с включенным скрытым элементом), либо выполнить цикл во второй раз. (мучительно) и попробуйте заставить элементы отображать: none где-то с меньшей вероятностью будет выбрано.

Ohgodwhy, я хотел поверить в ваше решение. В IE8 скрытое поле не отображалось в блокноте; однако я смог скопировать этот раздел и вставить его в Microsoft Word. Это больше не скрывалось.

Еще один фактор в работе: эта страница уже довольно загружена javascript, поэтому я надеялся, что смогу найти решение, которое не позволит IE видеть значения без добавления еще одного прохода через 100+ потенциальных элементов... но, возможно, мне просто придется .

Обновление: Предложение Робин Мабенпохоже, что это отличныйобходной путь! Его предложение состоит в том, чтобы скрыть значения в пользовательском атрибуте HTML5 data-x. Похоже, это работает, несмотря на мою (скорее всего) несовместимую с HTML5 страницу.Пожалуйста, проголосуйте за его ответ, если вы также считаете его ценным вкладом.

Обновление: подтверждено. Я успешно реализовал предложение Мабена и, следовательно, смог сократить количество операций поиска в DOM — по одному для каждого элемента на моей странице. Я уже перебирал все DIV с элементами, которые хотел показать,и теперь я могу одновременно автоматически обращаться к свойству данных. В моей реализации это выглядит следующим образом:


Многоточие указывает на выполнение уникальных для меня операций. Идентификатор имеет простой числовой индикатор, который увеличивается на единицу для каждой записи.

// Loop through all of the items on the page that start with my id
$("[id^=stackLocatorLinkFillUp]").each( function() {
    // ...
    // Grab the contents of the div
    var innerContent = $(this).html();
    // Extract the call number out of the data-call-number field
    var callNumPreEncoded = $(this).data("callNumber");
    // ...eventually...
    $(this).html(...).css("display","block");
});

Всем спасибо!

8
задан Community 23 May 2017 в 12:04
поделиться