TOGOUTECH

javascript - 输入新段落时防止属性被复制?

coder 2024-05-16 原文

在 CKEditor 中创建新段落时,前一段的属性(样式、类)会被复制到新段落上。有办法避免这种情况吗?

例如,如果我在一个居中的段落中书写并按 enter 键创建一个新段落,我的用户希望新段落是一个简单的

而不“继承”前一个段落默认。


编辑

我设法使用 Reinmar 的提示(危险地未经测试)得到它。这就是我的结局;我希望这可以帮助别人。如果你们在这里看到明显的错误,请告诉我

CKEDITOR.on('instanceCreated', function(e) {
    e.editor.on('key', function(evt) {
        if (evt.data.keyCode === 13) {
            // if we call getStartElement too soon, we get the wrong element
            setTimeout(function () {
                var se = e.editor.getSelection().getStartElement();
                if(se.getName() == "span") {
                    var text = se.getText(); // Store text, we are about to nuke the spans
                    while (se.getName() == "span") { // possible infinite loop danger
                        se = se.getParent();
                    }
                    if (text.length == 0)
                        se.setHtml(" "); // It's important that this is not empty
                    else
                        se.setHtml(text);
                }
                debug(se.getHtml());
                se.removeAttribute("class");
                se.removeAttribute("mycustomattr");
                se.removeAttribute("myothercustomattr");
                window.bla = se; // useful for debugging
            }, 10);
        }
    });
}); 

最佳答案

我在即将推出的 CKEditor v4(当前的夜曲)中遇到了类似的问题。我从我的自定义图像浏览器插入一个带有图像和自定义类的段落,CKEditor 一直将这些类复制到在图像之后创建的段落。

我不喜欢 key 事件之后调用 setTimeout 的想法,所以我稍微检查了一下源代码,发现它非常简单。

当您按下 enter 键时,CKEditor 实际上会发出 enter 命令。您需要做的就是设置一个 afterCommandExec 事件并找到新创建的空元素:

editor.on('afterCommandExec', function (e) {
    if (e.data.name == 'enter') {
        var el = e.editor.getSelection().getStartElement();

        // when splitting a paragrah before it's first character,
        // the second one is selected
        if (el.getHtml() != '<br>') {
            if (el.hasPrevious() && el.getPrevious().getHtml() == '<br>') {
                el = el.getPrevious();
            } else {
                // both paragraphs are non-empty, do nothing
                return;
            }
        }

        // modify el according to your needs
    }
});

希望这对您有所帮助!

关于javascript - 输入新段落时防止属性被复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12914536/

有关javascript - 输入新段落时防止属性被复制?的更多相关文章

  1. c# - 尝试使用 EF 更新实体并使用 WCF 发送它 - 属性在更新场景中导致异常 - 2

    我正在尝试使用WCF发送一个对象。使用EF从数据库中检索对象。这是我得到的异常:这只发生在更新场景中。插入效果完美。跟踪错误,我发现问题出在我最近添加的一个集合(称为Travelers)上。以下是当我尝试在运行时观察它的值时发生的情况,在更新之后,在WCF发送更新的实体之前:这是有问题的类的属性声明(我尝试取消对DataMember属性的注释,但没有成功):[DataContract]publicclassTravel:InsuredObject,ISaleEntity,ICloneable{//[DataMember]publicvirtualICollection<Trave

  2. c# - 如何在 Entity Framework Core 中使用复数 DbSet 属性名称搭建 DbContext? - 2

    我在PackageManagerConsole中使用Scaffold-DbContext命令为现有的SQLServer数据库创建和重新创建上下文和实体:Scaffold-DbContext-providerEntityFramework.MicrosoftSqlServer-connection"myconnectionstring"除一件事外,它工作完美:DbSet的属性名称为单数形式:publicpartialclassMyDbContext:DbContext{publicvirtualDbSet<Request>Request{get;set;}pu

  3. c# - 如何从 ASP.NET Web Api 中的绑定(bind)中排除某些属性 - 2

    如何排除某些属性,或明确指定哪些模型属性应由WebApi模型绑定(bind)器绑定(bind)?类似于ASP.NETMVC中的CreateProduct([Bind(Include="Name,Category")Productproduct),无需创建另一个模型类,然后从原始模型类复制所有验证属性模型。//EFentitymodelclasspublicclassUser{publicintId{get;set;}//ExcludepublicstringName{get;set;}//IncludepublicstringEmail{get;set;}//Includepublic

  4. c# - 如何使用 Name 属性枚举 .NET 中的线程? - 2

    假设我像这样启动两个线程://StartfirstthreadThreadloaderThread1=newThread(loader.Load);loaderThread1.Name="Rope";loaderThread1.Start();//StartsecondthreadThreadloaderThread2=newThread(loader.Load);loaderThread2.Name="String";loaderThread2.Start();有什么方法可以通过使用它们的Name属性来枚举线程?我想检查具有特定名称的线程是否仍在运行。

  5. c# - 如何使用 Linq 处理带有 FirstOrDefault 的 NULL 对象属性 - 2

    我真正的应用程序问题如下所示Employeeempl=newEmployee(397947,"David","Redson",80000);employees.Add(empl);employees.Add(newEmployee(174966,"Alfred","Swanson",50000));employees.Add(newEmployee(848024,"Alima","Bieyrou",40000));employees.Add(newEmployee(number:397462

  6. c# - 用 LINQ 替换嵌套的 foreach;修改和更新内部深处的属性 - 2

    考虑更改5或6层深对象的一个​​或多个属性的数据成员的要求。有一些子集合需要迭代才能到达需要检查和修改的属性。在这里,我们调用了一个方法来清除员工的街道地址。由于我们在循环中更改数据,当前的实现需要一个for循环来防止异常:Cannotassignto"someVariable"becauseitisa'foreachiterationvariable'这是带有嵌套foreach和for的当前算法(混淆)。foreach(varempincompany.internalData.Emps){foreach(varaddrinemp.privateData

  7. c# - 防止双击双击触发命令 - 2

    假设您有一个可以触发命令的控件:<ButtonCommand="New"/>如果用户双击命令,是否有办法防止命令被触发两次?编辑:在这种情况下重要的是我使用的是CommandingWPF中的模型。似乎只要按下按钮,就会执行命令。除了禁用或隐藏按钮外,我看不出有任何方法可以防止这种情况发生。 最佳答案 任何包含需要大量处理时间的代码的事件处理程序都可能导致延迟禁用相关按钮;无论在处理程序中调用禁用代码行的位置如何。试试下面的证明,你会发现禁用/启用与事件的注册没有关联。按钮点击事件仍然被注册并被处理。反证法

  8. c# - .Net DefaultValueAttribute 属性 - 2

    我在用户控件中得到了这段代码:[DefaultValue(typeof(Color),"Red")]publicColorMyColor{get;set;}如何将MyColor更改为其默认值? 最佳答案 DefaultValueAttribute不会将属性设置为值,它纯粹是信息性的。VisualStudio设计器会将此值显示为非粗体,将其他值显示为粗体(已更改),但您仍然必须将该属性设置为构造函数中的值。如果值是由用户设置的,设计器将为该属性生成代码,但您可以通过右键单击该属性并单击Reset来删除该代码。

  9. c# - 使用 LINQ 查找具有特定属性名称和值的 XElement - 2

    XDocumentxDocument=XDocument.Load("...");IEnumerable<XElement>elements=xDocument.Element("lfm").Element("events").Elements("event");try{foreach(XElementelminelements){comm.Parameters.AddWithValue("extID",elm.Element("id").Value??"");c

  10. c# - 如何在不知道封闭泛型类型的情况下访问泛型属性 - 2

    我有一个通用类型如下publicclassTestGeneric<T>{publicTData{get;set;}publicTestGeneric(Tdata){this.Data=data;}}如果我现在有一个对象(来自某个外部源),我知道它的类型是某个封闭的TestGeneric,但我不知道TypeParameterT。现在我需要访问数据我的对象。问题是我无法转换对象,因为我不确切知道哪个关闭的TestGeneric。我用//thxtohttp://stackoverflow.com/questions/457676/c-reflection-check-if-a-c

随机推荐

  1. c# - 对列表进行排序,使特定值排在最前面 - 2

    我有一个Offer类,其中包含一个已归档的类别。我希望特定类别的所有报价显示在顶部,然后是其他所有报价。我试过了,但没有用,你有什么推荐的?Offers=Offers.OrderBy(x=>x.Category=="Corporate").ToList(); 最佳答案 当您按bool值排序时,false(0)出现在true(1)之前。要首先获取与谓词匹配的元素,您应该使用OrderByDescending反转排序顺序:Offers=Offers.OrderByDescending(x=>x.Categor

  2. c# - 代码隐藏中的动态上下文菜单 - 2

    我只想为我动态创建的几个对象添加ContextMenu,但是我发现的唯一方法是像这样在运行时创建ContextMenu:ContextMenupMenu=newContextMenu();MenuItemitem1=newMenuItem();MenuItemitem2=newMenuItem();//Ihaveabout10items//...item1.Header="item1";item1.Click+=newRoutedEventHandler(item1_Click);pMenu.Items.Add(item1);item2.Header="item

  3. c# - 以管理员身份运行 : requireAdministrator & ClickOnce + emulating system time - 2

    我的应用程序使用ClickOnce技术。今天我需要以管理员身份运行它。我修改了来自的list文件<requestedExecutionLevellevel="asInvoker"uiAccess="false"/>到<requestedExecutionLevellevel="requireAdministrator"uiAccess="false"/>但是VS无法编译项目:Error35ClickOncedoesnotsupporttherequestexecutionlevel'requ

  4. c# - 从 C# 中删除数据库 - 2

    在使用MSTEST进行测试期间,我有一个MDF文件附加到我的本地SQL服务器,我不想在运行测试集50次后手动删除这些临时数据库。(我已经这样做了,但我不喜欢它>.在我的TestCleanup方法中,我正在寻找一种在完成测试后从服务器中删除数据库的方法。我只需要一些关于我将使用哪些SQL语句来执行此操作的指导。EDIT(由SoftwareMonkey,从OP拒绝的编辑到ODED的回答)这是对我有用的代码:varserver=newServer(serverName);//Canuseoverloadthatspecifiesforeach(Databasedbinserver.Datab

  5. c# - 正则表达式删除特殊字符 - 2

    我们需要一个C#函数来删除字符串中的所有特殊字符。此外,是否可以将“George's”更改为“George”(同时删除单引号和字符s)? 最佳答案 此方法将删除除字母、数字和空格之外的所有内容。它还将删除任何后跟字符s的'或"。publicstaticstringRemoveSpecialCharacters(stringinput){Regexr=newRegex("(?:[^a-z0-9]|(?<=['\"])s)",RegexOptions.IgnoreCase|RegexOptions.

  6. c# - Unity 应用程序 block 2.0 - 给定的程序集名称或代码库无效 - 2

    接口(interface)(在名为“Interfaces”的程序集中。在项目中:-Interfaces)namespaceInterfaces{publicinterfaceIDoSomeWork1{stringDoSomeWork1();}}namespaceInterfaces{publicinterfaceIDoSomeWork2{stringDoSomeWork2();}}依赖项(在名为“Entities”的程序集中。在项目中:-Entities)namespaceEntities{publicclassClassB:IDoSomeWork1{publicstringDoSom

  7. C# 在 X 秒后执行操作 - 2

    我想开发一个Windows控制台应用程序,它在给定时间后定期执行一个操作。我在某处读到计时器类仅适用于Windows窗体应用程序,那么完成我想要的东西的最佳方法是什么? 最佳答案 Originalmessage:Iwrotethissampleconsoleapplication(usingC#4.0[asindicatedbythedefaultparameters]).It'sextremelyversatileandutilizestheActiondelegatetoallowpassingsnippetsthaty

  8. c# - C# 中的默认访问修饰符 - 2

    如果我要创建一个如下所示的新对象,它默认具有哪个访问修饰符?ObjectobjectA=newObject(); 最佳答案 任何成员都将始终拥有最受限制的可用成员-因此在这种情况下,objectA的可访问性是private。(假设它是一个实例变量。作为局部变量没有任何意义,因为它们本身没有任何访问规则。)所以这样:classFoo{ObjectobjectA=newObject();}等同于:internalclassFoo{privateObjectobjectA=newObject();}“默认为最私有(private)”意味着

  9. c# - 这些对象的引用是在栈上还是在堆上? - 2

    如果有人能告诉我我是否理解得很好,我将不胜感激:classX{Aa1=newA();//referenceonthestack,objectvalueontheheapa1.VarA=5;//onthestack-valuetypeAa2=a1;//referenceonthestack,objectvalueontheheapa2.VarA=10;//onthestack-valuetype}此外,a1和a2引用都在堆栈上,而它们的“对象”值在堆上。但是VarA变量呢,它仍然是纯值类型?classA{intVarA;} 最佳答案

  10. C# HttpRuntime.Cache.Insert() 不持有缓存值 - 2

    我正在尝试使用HttpRuntime.Cache.Insert()来缓存价格值,但在清除之前似乎只保留了几个小时或更长时间。我究竟做错了什么?我希望该值在缓存中保留3天。HttpRuntime.Cache.Insert(CacheName,Price,null,DateTime.Now.AddDays(3),TimeSpan.Zero); 最佳答案 简答您的应用程序池或网站关闭得太早了。延长站点的空闲超时,延长运行该站点的池的应用程序池生命周期。提高内存分配和请求限制。完整答案如果您想知道什么时候以及为什么从缓存中删除某些内容,您需