Css 如何替换或删除Sharepoint 2010功能区中的HTML编辑器样式

Css 如何替换或删除Sharepoint 2010功能区中的HTML编辑器样式,css,sharepoint-2010,Css,Sharepoint 2010,我想用我自己创建的样式替换编辑器功能区上“HTML样式”下拉列表中的HTML编辑器样式。根据这篇MSDN文章,只要我开始将以模式ms rtecustomxxxx(XXXX是一个自定义名称)开头的类放入页面中加载的CSS中,现有样式就应该被替换。我希望在下拉列表中只保留我的样式,但是我可以看到所有原始Sharepoint样式,然后是我的样式 我是在文档中遗漏了什么,还是在骗我?据我所知,原始样式来自于母版页加载的corev4.css,但是随着我的css稍后加载,似乎应该清除下拉列表中已经存在的任何

我想用我自己创建的样式替换编辑器功能区上“HTML样式”下拉列表中的HTML编辑器样式。根据这篇MSDN文章,只要我开始将以模式
ms rtecustomxxxx
(XXXX是一个自定义名称)开头的类放入页面中加载的CSS中,现有样式就应该被替换。我希望在下拉列表中只保留我的样式,但是我可以看到所有原始Sharepoint样式,然后是我的样式

我是在文档中遗漏了什么,还是在骗我?据我所知,原始样式来自于母版页加载的corev4.css,但是随着我的css稍后加载,似乎应该清除下拉列表中已经存在的任何样式

下面是我正在使用的CSS中的一种新的/自定义样式

H3.ms-rteElement-H3CompanyName
{
    -ms-name:"Heading 3";
}
.ms-rteElement-H3CompanyName
{
    font-family: Arial, Helvetica, sans-serif;
    font-size: small;
    font-style: normal;
    line-height: normal;
    font-weight: bold;
    font-variant: normal;
    text-transform: none;
    color: #000000;
}

我不知道你在哪里读到“一旦添加自定义样式,旧样式就会被删除”。我阅读文档的方式与我的经验相关——自定义样式只是添加到下拉列表的底部

但是,您可以做的是使用自定义样式覆盖内置样式。只需使用与OOTB样式完全相同的名称,并在CSS文件中输入您自己的样式即可。示例:要覆盖样式“Callout 1”,请在CSS中为.ms-rtelement-Callout 1添加规则,并在其中添加您自己的样式

另一个选项是编写JavaScript函数,并使用

SP.UI.Workspace.add_resized(your_javascript_function_name);

在函数内部,可以使用jQuery语句从功能区控件的下拉列表中删除所有(或前X个)元素。

从标记样式下拉列表中删除元素的唯一方法似乎是修改Sharepoint主配置单元中的文件。在这些更改之后重置IIS可能是一个好主意,然后按ctrl-F5完全刷新浏览器所看到的内容

通常不建议这样做,因为这些文件可能会在Sharepoint升级过程中更改,但这似乎是唯一可靠工作的方法

要从标记样式下拉列表中删除不需要的元素,请删除影响此模式中命名的类的所有CSS规则
.ms rtelement XXXX
。此菜单中使用的我们自己的样式添加到我们自己的样式表中

有四个文件需要修改,两个是Controls.css,两个是Corev4.css

它们的位置如下:

Controls.css 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\PublishingLayouts\en-us\Controls.css

COREV4.CSS 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\STYLES\COREV4.CSS

CONTROLS.CSS 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\STYLES\CONTROLS.CSS

COREV4.CSS 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\STYLES\Themable\COREV4.CSS

我会将你的CSS添加到网站设置中“外观”下的“备选CSS”选项中。如果看不到该选项,请启用“发布选项”

然后添加你想要的CSS。它最后加载,为了确保,您可以添加!对样式很重要

在这里查看更多详细信息。。。翻到一半

请编辑以下评论:

$('a#Ribbon.EditingTools.CPEditTab.Markup.ElementWithStyle-Large').click(function(){
  $('a#ElementWithStyle3-Menu').parent().hide();
});

我最终使用纯Javascript实现了这一点。我所做的是注册一个PageComponent,然后为相应的命令添加一个处理程序(对于标记样式,该命令称为“ElementWithStyleOptions打开”)

以下是有关如何开发PageComponents的MSDN文档:

在我的自定义PageComponent类中,我将“ElementWithStyleOptionsOpen”注册为全局命令:

getGlobalCommands: function () {
    return ['ElementWithStyleOptionsOpen'];
}
…并将其添加到canHandleCommand中:

canHandleCommand: function (commandId) {
    if (commandId === 'ElementWithStyleOptionsOpen')  {
        return true;
    }
    else {
        return false;
    }
最后,我的HandleCommand如下所示:

handleCommand: function (commandId, properties, sequence) {
    if(commandId=='ElementWithStyleOptionsOpen') {
          //Remove styles that have the word Colored
          jQuery('li.ms-cui-menusection-items:contains("Colored")').remove();
    }
}

您还可以使用css而不是JavaScript来隐藏标记样式。 例如,这就是如何隐藏标题1s

#Ribbon\.EditingTools\.CPEditTab\.Paragraph\.ElementWithStyle\.Menu\.Styles #ElementWithStyle0-Menu,
#Ribbon\.EditingTools\.CPEditTab\.Paragraph\.ElementWithStyle\.Menu\.Styles #ElementWithStyle4-Menu
    {display:none;}

假设这是一个发布页面,删除样式的最佳方法是修改页面布局中的控件

<PublishingWebControls:RichHtmlField FieldName="PublishingPageContent" HasInitialFocus="True" MinimumEditHeight="400px" runat="server" PrefixStyleSheet="customPrefix"/>


通过声明一个新的PrefixStyleSheet,它将删除所有默认样式,因此您只能提供自己的样式。

呃,该死,看起来我误读了它,它所说的是.ms元素。javascript方法听起来很有希望,我来试一试。javascript确实允许我从列表中删除项目,但是在选择下拉菜单之前,它们不会呈现在页面上。是否有一个我应该监听的事件可以触发javascript?我不完全确定我是否知道你的意思-在选择哪个下拉菜单之前什么不会呈现?我正在尝试使用jquery选择每个样式的列表元素并删除它们。在触发add_resized事件时,页面源中不存在样式列表(因此不会在页面上呈现)。由于列表中的项目还不存在,javascript无法选择删除它们,因此询问要侦听的事件。选择下拉列表时,将显示这些元素。或者,我是否遗漏了您最初的建议?好吧,现在我明白了:)不幸的是,ECMAScript事件没有很好的文档记录。但是我发现了另一个看起来很有希望的:CUI.Page.PageManager.add\u ribbonInited(你的\u javascript\u函数\u名称),这不是我想要的。我同意您描述的解决方案适用于覆盖元素(这是我尝试过的一种方法),但是我想删除元素。我上面描述的答案是我迄今为止找到的唯一解决方案。我想我也有点误读了这条线索。。。您在上面询问了要删除它们需要听什么。也许可以编写一些快速jquery来查找标记样式按钮。我将用代码示例编辑我的答案。我将避免重写核心元素。我不应更改MS提供的文件。服务包和累积更新可能会覆盖您的更改。