CKEditor ตัดคลาสออกจาก div โดยอัตโนมัติ


140

ฉันใช้CKEditorเป็นเครื่องมือแก้ไขส่วนหลังบนเว็บไซต์ของฉัน ฉันกำลังขับรถไปรอบ ๆ โค้ง แต่ดูเหมือนว่าฉันต้องการเปลี่ยนรหัสเป็นวิธีที่เหมาะสมเมื่อใดก็ตามที่ฉันกดปุ่มซอร์ส ตัวอย่างเช่นถ้าฉันกดแหล่งข้อมูลและสร้าง<div>...

<div class="myclass">some content</div>

จากนั้นก็ไม่มีเหตุผลที่ชัดเจนตัดชั้นเรียนจาก<div>ดังนั้นเมื่อฉันกดแหล่งที่มาอีกครั้งก็เปลี่ยนเป็น ...

<div>some content</div>

ฉันคิดว่าพฤติกรรมที่น่ารำคาญนี้สามารถปิดconfig.jsได้ แต่ฉันขุดและไม่พบสิ่งใดในเอกสารเพื่อปิด


8
ฉันพบโซลูชันหลังจากการขุดมากถ้าคุณเข้าไปใน config.js และตั้งค่า CKEDITOR.config.allowedContent = true มันหยุดแก้ไขสิ่งที่ยุ่งกับสิ่งต่าง ๆ
เลนซิมป์สัน

คำตอบ:


284

ปิดใช้งานการกรองเนื้อหา

ทางออกที่ง่ายที่สุดคือไปที่config.jsและการตั้งค่า:

config.allowedContent = true;

( อย่าลืมล้างแคชของเบราว์เซอร์ ) จากนั้น CKEditor หยุดกรองเนื้อหาที่ป้อนเลย อย่างไรก็ตามสิ่งนี้จะปิดการใช้งานการกรองเนื้อหาทั้งหมดซึ่งเป็นหนึ่งในคุณสมบัติที่สำคัญที่สุดของ CKEditor

การกำหนดค่าการกรองเนื้อหา

คุณสามารถกำหนดค่าตัวกรองเนื้อหาของ CKEditorได้แม่นยำยิ่งขึ้นเพื่ออนุญาตเฉพาะองค์ประกอบคลาสสไตล์และแอตทริบิวต์ที่คุณต้องการ วิธีนี้ดีกว่ามากเนื่องจาก CKEditor จะยังคงลบ HTML เส็งเคร็งจำนวนมากที่เบราว์เซอร์สร้างเมื่อคัดลอกและวางเนื้อหา แต่จะไม่ดึงเนื้อหาที่คุณต้องการ

ตัวอย่างเช่นคุณสามารถขยายการกำหนดค่าเริ่มต้นของ CKEditor เพื่อรับคลาส div ทั้งหมด:

config.extraAllowedContent = 'div(*)';

หรือบางสิ่ง Bootstrap:

config.extraAllowedContent = 'div(col-md-*,container-fluid,row)';

หรือคุณสามารถอนุญาตรายการคำอธิบายที่มีdirแอตทริบิวต์ที่เป็นตัวเลือกสำหรับdtและddองค์ประกอบ:

config.extraAllowedContent = 'dl; dt dd[dir]';

นี่เป็นเพียงตัวอย่างพื้นฐานมาก ๆ คุณสามารถเขียนกฎได้ทุกประเภท - ต้องมีคุณสมบัติ, คลาสหรือสไตล์, จับคู่เฉพาะองค์ประกอบพิเศษ, จับคู่องค์ประกอบทั้งหมด คุณสามารถไม่อนุญาตสิ่งต่าง ๆ และกำหนดกฎของ CKEditor ใหม่ทั้งหมด อ่านเพิ่มเติมเกี่ยวกับ:


3
สิ่งนี้จะปิดการใช้งานคุณสมบัติ ดีกว่าการกำหนดค่ามากกว่าปิดการใช้งาน
oleq

1
@lain Simpson: คุณยังต้องตั้งคำถามนี้ตามคำตอบ ขอบคุณสำหรับการค้นหาวิธีแก้ปัญหา: D
Jacob van Lingen

1
บางครั้งวิธีนี้ใช้งานได้บางครั้งก็ไม่ได้ คุณลักษณะสไตล์จะถูกลบออกบางครั้งส่วนที่เหลือยังคงอยู่
machineaddict

2
ฉันกำลังทำงานกับสิ่งที่เรียกว่า Kentico ซึ่งใช้โปรแกรมแก้ไขนี้ ฉันได้เพิ่มบรรทัด "CKEDITOR.config.allowedContent = true;" ไปที่ config.js ของฉัน แต่ยังคงฟอร์แมต HTML ของฉันซึ่งแบ่งรหัส Bootstrap ของฉันมีใครมีความคิดเห็นบ้าง
Tom Bowen

1
ขอบคุณสำหรับโซลูชั่นที่สมบูรณ์แบบ วันที่ประหยัดสำหรับฉัน
เร็ว ๆ นี้

61

ฉันพบวิธีแก้ปัญหา

สิ่งนี้ปิดการกรอง แต่ก็ใช้งานได้ แต่ไม่ใช่ความคิดที่ดี ...

config.allowedContent = true;

ในการเล่นกับสตริงเนื้อหาจะทำงานได้ดีสำหรับ id ฯลฯ แต่ไม่ใช่สำหรับแอตทริบิวต์คลาสและสไตล์เนื่องจากคุณมี () และ {} สำหรับการกรองคลาสและสไตล์

ดังนั้นการเดิมพันของฉันคืออนุญาตให้มีคลาสใด ๆ ในโปรแกรมแก้ไขคือ:

config.extraAllowedContent = '*(*)';

สิ่งนี้อนุญาตให้คลาสและสไตล์อินไลน์ใด ๆ

config.extraAllowedContent = '*(*);*{*}';

หากต้องการอนุญาตเฉพาะ class = "asdf1" และ class = "asdf2" สำหรับแท็กใด ๆ :

config.extraAllowedContent = '*(asdf1,asdf2)';

(ดังนั้นคุณต้องระบุชื่อคลาส)

หากต้องการอนุญาตเฉพาะ class = "asdf" สำหรับแท็ก p เท่านั้น:

config.extraAllowedContent = 'p(asdf)';

วิธีอนุญาตให้ใช้แอตทริบิวต์ id สำหรับแท็กใด ๆ :

config.extraAllowedContent = '*[id]';

ฯลฯ

หากต้องการอนุญาตแท็กสไตล์ (<style type = "text / css"> ... </style>):

config.extraAllowedContent = 'style';

จะซับซ้อนกว่านี้เล็กน้อย:

config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}';

หวังว่ามันจะเป็นทางออกที่ดีกว่า ...


1
นี่คือ superberb ta
Rippo


10 ดาวสำหรับคำตอบของคุณ
Brijesh Mavani

รุ่งโรจน์สำหรับความพยายามของคุณ!
มิเชล

15

แก้ไข : คำตอบนี้สำหรับผู้ที่ใช้โมดูล ckeditor ใน drupal

ฉันพบโซลูชันที่ไม่ต้องการแก้ไขไฟล์ ckeditor js

คำตอบนี้จะคัดลอกมาจากที่นี่ เครดิตทั้งหมดควรไปที่ผู้เขียนต้นฉบับ

ไปที่ "ผู้ดูแลระบบ >> การกำหนดค่า >> CKEditor"; ใต้โปรไฟล์เลือกโปรไฟล์ของคุณ (เช่นเต็ม)

แก้ไขที่รายละเอียดและที่ "ตัวเลือกขั้นสูง >> การกำหนดค่า JavaScript ที่กำหนดเอง" config.allowedContent = true;เพิ่ม

ป้อนคำอธิบายรูปภาพที่นี่

อย่าลืมล้างแคชใน "แท็บประสิทธิภาพ"


4
คำตอบนี้มีไว้สำหรับ drupal เท่านั้น ... แต่อย่างไรก็ตามขอบคุณเพราะฉันแค่มองหาวิธีแก้ปัญหา drupal
LarS

1
@ LarS น่าสนใจ ฉันจำไม่ได้ว่าทำไมฉันถึงคิดว่าคำถามนี้เกี่ยวข้องกับ drupal แต่ดูเหมือนว่ามันช่วยพวก drupal ได้
sepehr

14

ตั้งแต่ CKEditor v4.1 คุณสามารถทำได้ใน config.js ของ CKEditor:

CKEDITOR.editorConfig = function( config ) {
  config.extraAllowedContent = '*[id](*)';  // remove '[id]', if you don't want IDs for HTML tags
}

คุณสามารถอ้างถึงเอกสารทางการสำหรับไวยากรณ์รายละเอียดของกฎเนื้อหาที่อนุญาต


มีข้อผิดพลาดทางไวยากรณ์ที่คุณมีด้านบน ต้องตั้งค่าแอตทริบิวต์ของสไตล์โดยใช้
วงเล็บ

สวัสดี kamelkev คำตอบของฉันสำหรับชั้นเรียนไม่ใช่สำหรับสไตล์ตามคำถาม โดยทั่วไปนั่นคือสิ่งที่ฉันใช้และฉันไม่คิดว่ามันมีข้อผิดพลาด
Marty ZHANG

ขอบคุณสำหรับคำตอบ*[id](*)เคล็ดลับของคุณฉันลอง*[id,class]มาก่อน แต่นั่นไม่อนุญาตให้ใช้แอตทริบิวต์ class อย่างใด เอกสาร CKeditor เป็นบิตเหมือนเขาวงกต
GDmac

1
+1 การทำความเข้าใจกับกฎของเนื้อหาอาจเป็นวิธีที่ดีกว่าการปิดใช้งานการกรองทั้งหมดตามคำแนะนำอื่น ๆ ที่แนะนำ
Michael Martin-Smucker

10

หากคุณใช้ ckeditor 4.x คุณสามารถลองได้

config.allowedContent = true;

หากคุณใช้ ckeditor 3.x คุณอาจประสบปัญหานี้

ลองวางบรรทัดต่อไปนี้ใน config.js

config.ignoreEmptyParagraph = false;

config.ignoreEmptyParagraph=false;เป็นทางออกเดียวที่ได้ผลสำหรับฉันจากคำตอบทั้งหมดที่ฉันได้ลอง ขอบคุณ.
สเตฟาน

9

สิ่งนี้เรียกว่า ACF (ตัวกรองเนื้อหาอัตโนมัติ) ใน ckeditor.It ลบแท็ก unnessary ทั้งหมดที่เราใช้ในเนื้อหาข้อความการใช้คำสั่งนี้ในไฟล์ config.js ของคุณควรจะปิด ACK นี้

config.allowedContent = true;

6

โปรดดูที่ขั้นสูงคู่มือกรองอย่างเป็นทางการของเนื้อหาและการกวดวิชาบูรณาการปลั๊กอิน

คุณจะพบมากกว่านี้เกี่ยวกับคุณสมบัติที่มีประสิทธิภาพนี้ ดูที่config.extraAllowedContentที่เหมาะกับความต้องการของคุณ


4

หากคุณใช้ Drupal และโมดูลที่เรียกว่า "WYSIWYG" กับไลบรารี CKEditor การแก้ปัญหาต่อไปนี้อาจเป็นวิธีแก้ปัญหา สำหรับฉันมันใช้งานได้เหมือนมีเสน่ห์ ฉันใช้ CKEditor 4.4.5 และ WYSIWYG 2.2 ใน Drupal 7.33 ฉันพบวิธีแก้ปัญหานี้ที่นี่: https://www.drupal.org/node/1956778 https://www.drupal.org/node/1956778

นี่คือ: ฉันสร้างโมดูลที่กำหนดเองและใส่รหัสต่อไปนี้ในไฟล์ ".module":

<?php
/**
 * Implements hook_wysiwyg_editor_settings_alter().
 */
function MYMODULE_wysiwyg_editor_settings_alter(&$settings, $context) {
  if ($context['profile']->editor == 'ckeditor') {
    $settings['allowedContent'] = TRUE;
  }
}
?>

ฉันหวังว่านี่จะช่วยผู้ใช้ Drupal รายอื่น ๆ


ขอบคุณสำหรับคำตอบ drupal นี้
relipse

3

ต่อไปนี้เป็นตัวอย่างที่สมบูรณ์แบบสำหรับCKEDITOR 4.x :

HTML

<textarea name="post_content" id="post_content" class="form-control"></textarea>

SCRIPT

CKEDITOR.replace('post_content', {
   allowedContent:true,
});

โค้ดด้านบนจะอนุญาตแท็กทั้งหมดในเครื่องมือแก้ไข

สำหรับรายละเอียดเพิ่มเติม: CK EDITOR กฎเนื้อหาที่ได้รับอนุญาต


0

ฉันพบว่าการสลับไปใช้ html แบบเต็มแทนที่จะเป็น html ที่กรองแล้ว (ด้านล่างเครื่องมือแก้ไขในกล่องแบบเลื่อนลงรูปแบบข้อความ) เป็นสิ่งที่แก้ไขปัญหานี้ให้ฉันได้ มิฉะนั้นสไตล์จะหายไป


0

ฉันต้องการเพิ่ม config.allowedContent = true นี้ จำเป็นต้องเพิ่มลงในไฟล์ ckeditor.config.js ไม่ใช่ไฟล์ config.js, config.js ไม่ได้ทำอะไรเลยสำหรับฉัน แต่เพิ่มลงในพื้นที่ด้านบนของ ckeditor.config.js เก็บคลาส div ของฉันไว้


0

ตัวเลือกอื่นหากใช้ drupal เป็นเพียงการเพิ่มสไตล์ css ที่คุณต้องการใช้ วิธีนั้นจะไม่ตัดชื่อสไตล์หรือคลาสออก

ดังนั้นในกรณีของฉันภายใต้แท็บ css ใน drupal 7 เพียงเพิ่มสิ่งที่ชอบ

Facebook = span.icon-facebook2

ตรวจสอบด้วยว่าปุ่มแบบอักษรเปิดใช้งานอยู่


0

ฉันประสบปัญหาเดียวกันกับโครมกับ ckeditor 4.7.1 เพียงแค่ปิดการใช้งาน pasteFilter ใน ckeditor instanceReady คุณสมบัตินี้จะปิดใช้งานตัวเลือกตัวกรองทั้งหมดของ Advance Content Filter (ACF)

 CKEDITOR.on('instanceReady', function (ev) {
        ev.editor.pasteFilter.disabled = true;
    });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.