2012-01-29 7 views
6
// create a style element 
$("#main").html('<style id="custom_persona_css"></style>'); 

$("#custom_persona_css").append('#abc{ color:#000000; }'); 

Như bạn có thể nói, điều này không hoạt động trong IE8!Làm cách nào để chèn kiểu vào IE8?

Tôi làm cách nào để nó hoạt động trong IE8?

Sẽ có một lỗi: 'cuộc gọi bất ngờ với phương pháp hay tài sản truy cập' vì IE8 không nhận ra html là hợp lệ (abc phần)

Trả lời

4

Trong MSIE thiết lập cssText-tài sản của stylesheet đối tượng liên quan đến <style/> -element:

$('<style id="custom_persona_css"></style>').appendTo('head'); 

    if($.browser.msie) 
    { 
    $("#custom_persona_css").prop('styleSheet').cssText='#abc{ color:#000000; }'; 
    } 
    else 
    { 
    $("#custom_persona_css").append('#abc{ color:#000000; }'); 
    } 

http://jsfiddle.net/doktormolle/BLJUv/

Thông tin khác: http://msdn.microsoft.com/en-us/library/ie/ms533698%28v=vs.85%29.aspx

+0

+1 - tốt đẹp chút nugget tôi sẽ stow đi cho tương lai. – mrtsherman

+0

Điểm. Tôi không biết tại sao mọi người lại không bỏ phiếu này. Đây là 100% phù hợp với nhu cầu của tôi. Cảm ơn! – TIMEX

0

Bạn đang sử dụng jQuery, và jQuery có một thư viện khổng lồ của các phương pháp để thay đổi động kiểu dáng của các phần tử:

$(selector).css(propertyName, value); 

$(selector).propertyName(value); 

Trên đây chỉ là hai ví dụ về cách sử dụng jQuery để ảnh hưởng đến kiểu phần tử hoặc nhóm phần tử được xác định bởi bộ chọn.

Vì vậy, để thay đổi màu sắc của phần tử với id = "abc", sau đây sẽ làm việc:

$('#abc').css('color','#000000'); 

Ngoài ra, nếu bạn đang tìm kiếm để chủ đề một yếu tố hoặc nhóm của các yếu tố, bạn có thể tạo một tệp style.css phác thảo các kiểu cho các lớp khác nhau. Sau đó, bạn chỉ có thể áp dụng các phong cách bằng cách thêm hoặc loại bỏ các className đến các yếu tố (s) như sau:

style.css:

.custom_persona { 
    color:#000000; 
} 

.some_other_custom_style { 
    color:red; 
    background-color: #fff; 
} 

index.html kịch bản:

$('#abc').addClass('custom_persona'); 

// OR 

$('#abc').addClass('.some_other_custom_style'); 
$('#abc').removeClass('custom_persona'); 

jQuery CSS category of methods and properties đi vào chi tiết hơn về những thuộc tính có sẵn. Điều này không chỉ giải quyết vấn đề IE8 của bạn, nhưng điều này cũng sẽ làm việc trong tất cả các trình duyệt chính khác.

+1

Tôi không thể làm điều này. Bởi vì người dùng xác định các quy tắc và tôi áp dụng chúng. Chúng không được đặt trong đá. – TIMEX

+0

Bạn có ý nghĩa gì với người dùng xác định kiểu? Ngay cả khi người dùng đang xác định kiểu, bạn vẫn có thể sử dụng một trong các kỹ thuật ở trên để áp dụng chúng. Bây giờ, tôi đã không thử điều này, nhưng bạn có thể thử tự động tạo các kiểu do người dùng cung cấp này dưới dạng tệp CSS động và nối chúng vào phần HEAD 'var i = $ ('link'). Attr (" href "," /userGenerated.php?userId=555 "); $ ('head'). appendChild (i);' Trong trường hợp này, userGenerated.php kéo các kiểu từ một tệp hoặc cơ sở dữ liệu. – jmort253

4

Tôi đồng ý với jmort253 rằng có lẽ trực tiếp sửa đổi thuộc tính kiểu hoặc tải tệp css là tốt nhất. Sau đó, bạn có thể sử dụng các phương thức addClass và removeClass hiệu quả hơn. Điều đó đang được nói, các yếu tố phong cách nên được trong đầu (họ làm việc trong cơ thể tất nhiên, nhưng không phải là officially hỗ trợ như tôi nhớ lại). Vì vậy, bạn có thể làm một cái gì đó như thế này cho mục đích đó.

http://jsfiddle.net/TCUxx/1

$('head').append('<style type="text/css">#abc{ color:#ff0000; }</style>'); 

Cập nhật - vì lý do này không hoạt động. Tôi không biết tại sao. Hoạt động trong IE9.

var $styleElement = $('<style />', { 
    type: 'text/css', 
    text: '#abc{ color:#ff0000; }' 
}); 

$('head').append($styleElement); 
+0

+1 Chính xác những gì tôi đang nghĩ. Cảm ơn bạn đã xác minh! – jmort253

+0

@mrtsherman: Tính năng này có hoạt động trong IE8 của bạn không? –

+0

@ Dr.Molle - thực sự là không. Không có nó. Tôi không biết tại sao. Nếu bạn chỉ cần gõ mã nó hoạt động (thay đổi câu trả lời của tôi). Tôi đã thử thiết lập cssText như được đề xuất trong câu trả lời của bạn, nhưng nó không hoạt động. – mrtsherman

0

Liệu công việc này:

var $style = $("#custom_persona_css"); 

$style.html(
    $style.html() + '#abc{ color:#000000; }' 
); 

Hoặc

$("#custom_persona_css")[0].innerHTML += '#abc{ color:#000000; }'