2011-07-25 29 views
0

這適用於Firefox和Chrome,但不適用於IE8。使用jQuery訪問CKEditor iframe的樣式標籤

<div class="container"> 

<form action=""> 
    <textarea id="myed" rows="" cols=""></textarea> 
</form> 

<button id="twiddle">Twiddle CSS</button> 


<script type="text/javascript"> 
$(document).ready(function() { 
    CKEDITOR.replace('myed', {}); 
    $("#twiddle").click(function() { 
     var oldstyle = $($($('#myed').parent().find('iframe')[0]).contents()[0]).find('style'); 
     $(oldstyle).append("body { background-color: red; }"); 
    }); 
}); 
</script> 

我希望它可以將ckeditor的背景變成紅色,在FF/Chrome中可以實現。在IE瀏覽器,它不僅沒有做到這一點,它拋出一個錯誤:

網頁錯誤的詳細信息

用戶代理:Mozilla的/ 4.0(兼容; MSIE 8.0; Windows NT的6.1;三叉戟/ 4.0; SLCC2。 NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;媒體中心PC 6.0) 時間戳:星期一,2011 7月25日20:52:27 UTC

Message: Unexpected call to method or property access. 
Line: 16 
Char: 55208 
Code: 0 
URI: http://10.0.2.2:3000/javascripts/jquery.js?1297871725 

的jQuery:1.5的CKEditor :3.6.1

+0

有趣的是,這並不在IE工作: $(oldstyle).after($(「「)); –

+0

由於我建議的方法不適合你,我認爲這個問題可能是用來找到舊式的操作。我認爲也可以避免一些jQuery調用。你能粘貼包含你的textarea#myed的完整html,特別是它的父母嗎?所以試圖找到一個更好的方式來選擇它。 –

+0

嘿大衛,怎麼樣做$('#myed')。parent('body').css('background','red');''twiddle'裏面點擊回調? – stecb

回答

1

像這樣的事情會更容易實現:

<textarea id="myed">body { background : red; }</textarea> <!-- here you will set your ckeditor --> 

<button id="twiddle">update css</button> 

和jQuery的東西:

$('#twiddle').click(function(){ 

    $('#customStyle').remove(); //if I already have set customStyle, remove it 

    $("<style id='customStyle' type='text/css'>"+$('#myed').val()+"</style>").appendTo('head'); //add the new style to the current document head 

}); 

http://jsfiddle.net/steweb/67dXN/http://jsfiddle.net/67dXN/1/(KEYUP,實時更新)

0

是不是意圖用於插入DOM節點的append方法作爲指定元素的最後一個子元素?

http://api.jquery.com/append

我想你可能會尋找的是.html方法。

$(oldstyle).html($(oldstyle).html() + " body { background-color: red; }"); 

這樣你就可以將新的html添加到已經存在的html中。

+0

不,同樣的問題。 –

+0

http://jsfiddle.net/DLfXB/3/在這裏你可以看到我的意思。如果這在你的代碼中不起作用,我認爲問題在於那個複雜的選擇器。 –