8

これはIE固有の「機能」のようです。IE8を使用してテストしました。ユーザーJohnHは、IE6とIE7で確認することで貢献しています。

私のページに組み込まれているテキストがあり、要素の作成の最初からそれがありますstyle = "display: none;"

テキストを非表示にするためにjQueryを使用しておらず、テキストが「表示されていない」。ただし、さらに開示するために、jQueryの.html()メソッドを使用して要素のコンテンツにアクセスします。

ただし、ユーザーが私の要素の近くdisplay:noneのテキストを選択し、選択したものをコピーすると、非表示のテキストが含まれます。正常に表示されているかのように。

マークアップは次のようになります。

...
<td align="left">
    Text they should see
    <div id="whateverButUnique" style="display:none;">Value I want hidden</div>
    Some other text
</td>

これは、IE<9を使用して問題を再現できるフィドルです。

これはこの特定のアプリケーションにとって深刻な問題ではありませんが、私は気が狂ってしまい、これが「機能」なのか、それとも間違ったことをしているのか疑問に思いました。

私が見た他の質問のほとんどは、display:none彼らのポスターの内容が目に見えるものでした。繰り返しますが、私のコンテンツは、選択され、コピーされ、最後に貼り付けられるまで、基本的に見えません。

Internet Explorerユーザーがコピー/貼り付けしてこのコンテンツを見つけられないようにすることはできますか?私は彼らが開発者ツールでそしてソースを見ることによってそれを見ることができたことを理解します。

更新:他のユーザーのコメントのおかげで、とのスタイルを適用してみましvisibility:hiddenz-index=-1。ユーザーのジョンHは他の多くの隠蔽の試みを試みましたが、IEはこれまでのところ、この機能をすり抜けさせることに粘り強く取り組んでいます。すべての素晴らしいアイデアをありがとう!

更新:HeatherWaltersに質問していただきありがとうございます。ページで使用する必要のある値はサーバー側でのみ使用できますが、ページの読み込み後にそれらを使用して、jQuery/AJAXを介した外部プログラムからの追加処理を使用してリンクを生成します。そこで、値を非表示にして含まれているページを作成し、それらの非表示の値を操作して、それらを使用して役立つものを作成します。

しかし、それらを使用して有用なものを構築し終えると、jQueryを介してそれらをすべて消去し、パフォーマンスをさらに向上させることができることに気付きました。次のコードは、JavaScriptを有効にしているすべての人に対してこれを実現します。

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

ページ上に数百の要素が存在する可能性があるため、この余分な処理は理想的ではありません。

vega 、サーバー側でページと非表示のコンテンツを作成する必要があるため、このソリューションがうまくいくとは思いません。それらはすべてサーバー側のループに組み込まれており、他の何百もの要素が含まれている可能性があるため、サーバーがすべてをテーブルに配置している間に(非表示の要素を含めて)その場所に構築するか、もう一度ループするかを選択できます(苦痛)そして要素を強制的に表示しようとします:選択される可能性が低い場所はありません。

Ohgodwhy、私はあなたの解決策を信じたかった。IE8では、非表示のフィールドはメモ帳に表示されませんでした。ただし、セクションをコピーしてMicrosoftWordに貼り付けることはできました。それはもはや隠されていませんでした。

動作中の別の要因:このページはすでにかなりjavascriptが重いので、100以上の潜在的な要素を通過する別のパスを追加せずにIEが値を表示できないようにするソリューションを見つけることができると期待していました...しかし、私はそうしなければならないかもしれません。

更新Robin Mabenの提案は、すばらしい回避策になるようです。data-x彼の提案は、カスタムHTML5属性の値を非表示にすることです。私の(おそらく)HTML5に準拠していないページにもかかわらず、これは機能しているようです。貴重な貢献だと思われる場合は、彼の回答に賛成票を投じてください。

更新:確認済み。私はMabenの提案をうまく実装したので、DOMルックアップの数を減らすことができました-私のページの要素ごとに1つです。表示したいアイテムを含むすべてのDIVを既にループしていたので、同時にデータプロパティに自動的にアクセスできるようになりました。これは私の実装では次のようになります。

<div style="display:none" data-call-number="..." id="stackLocatorLinkFillUp...">...</div>

省略記号は、実行中の独自の操作を示します。IDには、レコードごとに1つずつ増加する単純な数値インジケーターがあります。

// 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");
});

みんな、ありがとう!

4

3 に答える 3

7

visibility:collapse物件を試しましたか?

" Value I want hidden"部分が純粋に計算目的で使用される場合は、" data"属性を使用する必要があります。

このような

<div data-custom-value="1001">Visible value </div>

jQueryでは、HTMLデータ属性はdata()APIを介して自動的に利用可能になります。

できるよ

someElement.data('customValue')値を読み取ります。

someElement.data('customValue', newValue)値を設定します。

私があなたの問題を正しく分析したことを願っています。

于 2012-04-12T19:11:14.747 に答える
3

サイズの表示と要素の位置は関係ありません。IE<9で項目を選択すると、htmlを選択し、そのhtmlを非表示の要素とともに貼り付けるために選択されます。IE9およびその他のブラウザーは、これらの非表示の要素を選択から適切に削除します。それを防ぐために私が知っている唯一の方法は、domに隠された要素を持たないことです。

于 2012-04-13T14:16:37.467 に答える
0

私はあなたが使用する方が良いと思います:

position: absolute; left: -10000px;

これにより、潜在的なIEの問題が解消されます。

于 2012-04-12T19:03:38.143 に答える