2012-04-12 25 views
8

Điều này có vẻ là một tính năng cụ thể của IE. Tôi đã thử nghiệm bằng IE8. Người dùng đã đóng góp bằng cách xác nhận trong IE6 và IE7.Văn bản ẩn có thể được chọn trong IE mặc dù style = 'display: none'

Tôi có một số văn bản đó được xây dựng vào trang web của tôi và từ đầu sáng tạo của phần tử nó có style = "display: none;"

tôi không sử dụng jQuery để ẩn các văn bản và văn bản không được 'hiển thị'. Mặc dù, để tiết lộ thêm, tôi truy cập nội dung của phần tử bằng cách sử dụng phương thức .html() của jQuery.

Tuy nhiên, nếu người dùng chọn văn bản lân cận phần tử display:none của tôi và sao chép nội dung đã được chọn, văn bản ẩn sẽ được đưa vào. Như thể nó đã được hiển thị bình thường.

Các đánh dấu trông như thế này:

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

Đây là một fiddle nơi tôi có thể tạo lại vấn đề bằng cách sử dụng IE < 9.

Trong khi đây không phải là một mối quan tâm nghiêm trọng cho các ứng dụng đặc biệt này, nó bắt tôi mất cảnh giác và tôi tự hỏi liệu đây có phải là một 'tính năng' hay nếu tôi làm điều gì đó không chính xác.

Hầu hết các số other questions Tôi đã xem về display:none có nội dung áp phích của họ hiển thị. Một lần nữa, nội dung của tôi về bản chất là vô hình cho đến khi được chọn, sao chép và cuối cùng được dán.

Tôi có thể ngăn người dùng Internet Explorer tìm thấy nội dung này bằng cách sao chép/dán không? Tôi nhận ra rằng họ có thể nhìn thấy nó trong Công cụ dành cho nhà phát triển và bằng cách xem nguồn.

Cập nhật: nhờ nhận xét của người dùng khác, tôi cũng đã thử áp dụng kiểu visibility:hiddenz-index=-1. Người dùng đã cố gắng rất nhiều nỗ lực ẩn khác nhưng IE là cho đến nay ngoan cường tại cho phép tính năng này để trượt qua. Cảm ơn vì tất cả những ý tưởng tuyệt vời!

Cập nhật: Cảm ơn bạn đã hỏi Heather Walters; các giá trị mà tôi cần sử dụng trên trang chỉ khả dụng ở phía máy chủ nhưng sau đó tôi sử dụng chúng sau khi tải trang để tạo liên kết bằng cách xử lý thêm từ chương trình bên ngoài thông qua jQuery/AJAX. Vì vậy, tôi xây dựng trang với các giá trị ẩn nhưng bao gồm và sau đó hoạt động trên những giá trị ẩn để xây dựng một cái gì đó hữu ích với họ.

Một khi tôi đã hoàn thành việc sử dụng chúng để xây dựng một cái gì đó hữu ích, tuy nhiên, bây giờ tôi nhận ra rằng tôi có thể xóa sạch tất cả chúng thông qua jQuery và có thêm hiệu suất. Mã sau đây sẽ thực hiện việc này cho tất cả mọi người đã bật javascript:

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

Với khả năng hàng trăm thành phần trên trang xử lý bổ sung này không lý tưởng.

vega, tôi không tin rằng this solution sẽ hoạt động đối với tôi vì tôi phải tạo trang và nội dung ẩn của mình ở phía máy chủ.Tất cả chúng đều được xây dựng trong một vòng lặp phía máy chủ với hàng trăm yếu tố khác, vì vậy tôi có thể lựa chọn để xây dựng nó trong khi máy chủ đang sắp xếp mọi thứ trong một bảng (với phần tử ẩn đi kèm) hoặc lặp lại nó lần thứ hai (đau đớn) và cố gắng buộc các yếu tố để hiển thị: không có nơi nào đó ít có khả năng được lựa chọn.

Ohgodwhy, tôi muốn tin tưởng vào giải pháp của bạn. Trong IE8, trường ẩn không xuất hiện trong notepad; tuy nhiên, tôi đã có thể sao chép phần và dán nó vào Microsoft Word. Nó không còn bị ẩn nữa.

Một yếu tố khác trong công việc: trang này đã khá javascript nặng nên tôi đã hy vọng tôi có thể tìm ra giải pháp ngăn IE xem các giá trị mà không cần thêm một mã khác thông qua hơn 100 yếu tố tiềm năng ... đến.

Cập nhật: gợi ý Robin Maben 's có vẻ như nó sẽ là một lớn workaround! Đề xuất của anh ta là ẩn các giá trị trong thuộc tính HTML5 tùy chỉnh data-x. Điều này dường như hoạt động mặc dù trang có khả năng tương thích với HTML5 (rất có thể) của tôi. Vui lòng bỏ phiếu cho câu trả lời của mình nếu bạn cũng coi đó là một đóng góp có giá trị.

Cập nhật: Đã xác nhận. Tôi đã triển khai thành công đề xuất của Maben và do đó đã có thể giảm số lần tra cứu DOM - một cho mọi phần tử trên trang của tôi. Tôi đã lặp qua tất cả các DIV với các mục mà tôi muốn hiển thị và bây giờ tôi có thể tự động truy cập vào thuộc tính dữ liệu cùng một lúc. Điều này có vẻ như thế này trong quá trình triển khai của tôi:

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

Dấu ba chấm biểu thị các hoạt động độc nhất đang diễn ra. Các id có một chỉ số số đơn giản mà increments một bản ghi.

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

Xin cảm ơn tất cả mọi người!

+0

Tôi nhớ có vấn đề cụ thể với IE đang cố ẩn các phần tử. Bạn đã thử sử dụng "mức độ hiển thị: ẩn" chưa? – McGarnagle

+2

Tôi có thể tạo lại hành vi này cho IE6, IE7 và IE8. IE9 sẽ hành xử như bạn mong đợi. Tôi sẽ đoán rằng họ chỉ coi nó như một phần tử bình thường trong tài liệu cho phép nó được sao chép. Tôi không có ý tưởng nếu có một cách xung quanh nó mặc dù. Tôi đã thử định vị phần tử ngoài màn hình nhưng điều đó không thay đổi gì cả. Sẽ rất thú vị nếu ai đó biết về một công việc xung quanh. –

+0

Cảm ơn @dbaseman; cho đến nay tôi đã thử, hiển thị: none, visibility: hidden, và z-index = -1 nhưng văn bản vẫn có thể được sao chép vào bộ đệm. @ John H, cảm ơn bạn đã xác nhận của bạn. Nó sẽ rất thú vị! – veeTrain

Trả lời

3

Hiển thị kích thước và vị trí của phần tử không quan trọng, nó được chọn vì khi bạn chọn mọi thứ trong IE < 9, bạn đang chọn html và sau đó dán html đó, với các yếu tố ẩn. IE9 và các trình duyệt khác loại bỏ đúng các yếu tố ẩn đó khỏi vùng chọn. Cách duy nhất tôi biết của để ngăn chặn nó là không có các yếu tố ẩn trong dom.

+0

Cảm ơn Kevin vì câu trả lời ngắn gọn, tôi tin rằng bạn đã trả lời câu hỏi gốc một cách chính xác và vì vậy tôi đã tính câu trả lời này là một câu trả lời cho tất cả những ai có thể ở trong tình huống tương tự và muốn một thay thế khi div của họ không được ẩn từ select/copy/paste trong IE <9, hãy xem bài đăng của RobinMaben dưới đây.Tôi bây giờ có một div ít hơn và do đó một ít DOM look-up. – veeTrain

0

Tôi nghĩ sẽ tốt hơn nếu bạn sử dụng:

position: absolute; left: -10000px; 

Điều đó sẽ loại bỏ bất kỳ vấn đề tiềm tàng IE.

+0

Tôi vẫn có thể sao chép/dán văn bản ẩn với ý tưởng của bạn. Xem [tại đây] (http://jsfiddle.net/zexC6/5/). – veeTrain

+0

Tôi cũng vẫn có thể xem văn bản trong môi trường sống của mình qua IE8. Cảm ơn đề xuất của bạn – veeTrain

6

Bạn đã thử thuộc tính visibility:collapse?

Nếu phần "Value I want hidden" được sử dụng hoàn toàn cho mục đích tính toán, bạn nên sử dụng thuộc tính "data".

Như thế này

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

Trong jQuery, HTML thuộc tính dữ liệu tự động có sẵn thông qua data() api.

Bạn có thể làm

someElement.data('customValue') để đọc giá trị.

someElement.data('customValue', newValue) để đặt giá trị.

Hy vọng tôi đã phân tích vấn đề của bạn một cách chính xác.

+0

Bạn có nghĩa là tôi nên đặt kiểu như vậy: 'style = 'display: none; khả năng hiển thị: collapse''? Điều đó không giải quyết được vấn đề có thể chọn/có thể sao chép/có thể dán. – veeTrain

+0

Cảm ơn bạn đã đề xuất. Tôi đã không thử nghiệm nhiều với khả năng hiển thị cho đến bây giờ. Đáng buồn là nó không làm cho nó ít có sẵn cho người dùng muốn sao chép văn bản bên cạnh nó (trong IE <9). – veeTrain

+0

@veeTrain: Xem liệu bản chỉnh sửa của tôi có giải quyết được sự cố của bạn hay không. –

Các vấn đề liên quan