【问题标题】:jQuery to modify SharePoint 2010 Column WidthjQuery 修改 SharePoint 2010 列宽
【发布时间】:2012-08-14 19:29:44
【问题描述】:

我觉得这是一个补救问题,但我已经战斗了好几天了......所以请原谅我。我在 SharePoint 2010 中工作,并且在甘特视图中有一个任务列表。该列表有 6 列加上甘特图。这些任务与 Microsoft Project 2010 同步(创建)。由于列宽在 SharePoint 中不是持久的,我希望第 2 列(标题)的默认宽度为 450 像素(应该足够简单......对吗?)。我使用 CEWP 尝试了许多 jquery 选项来尝试设置此列宽。我认为这看起来会更容易......有人可以帮我确定我在哪里偏离轨道吗?我一直在寻找互联网,直到浏览器无法再使用它......任何帮助将不胜感激。

我尝试过的选项:它们似乎都不起作用……我将它们放在库中的一个文本文件中(链接到 CEWP),脚本正在运行,因为我可以设置分割位置和缩放级别……只是不是列的宽度。

选项#1

    <script type="text/javascript">
    $(function(){
    $("TH.ms-vh2-nograd:contains('Title')").css("width", "450px"); 
    $("TH.ms-vb:contains('Title')").css("width", "450px"); }); 
    </script>

选项 #2

    <script type="text/javascript"> 
    $(function() 
    { 
        $("tr.ms-viewheadertr th:contains('Title')").css("width", "450px"); 
    });
    </script>

选项#3

    <script type="text/javascript"> 
    ExecuteOrDelayUntilScriptLoaded(function()
    {
    var oldGanttControl = SP.GanttControl;
    SP.GanttControl = function()
    {
    oldGanttControl.call(this);
    var oldInit = this.Init;
    this.Init = function(jsGridControl, jsRawGridData, params)
    {
    oldInit.call(this, jsGridControl, jsRawGridData, params);
    DoCustomizations(jsGridControl);
    };
    };
    },"SPGantt.js");

    Function DoCustomizations(grid)
    {
    var columns = grid.GetColumns();
    $.each(columns, function(key, value) {
    value.width=450;});
    grid.UpdateColumns(grid.parentNode.jsgridtableviewparams.columns);
    }
    </script>

有效的代码在这里。但无法解析列宽。

    <script type="text/javascript">
    ExecuteOrDelayUntilScriptLoaded(function()
    {
    var oldGanttControl = SP.GanttControl;
    SP.GanttControl = function()
    {
    oldGanttControl.call(this);
    var oldInit = this.Init;
    this.Init = function(jsGridControl, jsRawGridData, params)
    {
    oldInit.call(this, jsGridControl, jsRawGridData, params);
    DoCustomizations(jsGridControl);
    };
    };
    },"SPGantt.js");


    function DoCustomizations(grid) 
    {
    // Set the Splitter and Zoom Levels
    grid.SetSplitterPosition(725);
    grid.SetGanttZoomLevel(grid.GetGanttZoomLevel()+2);
    }

    </script>

答案 #1/更新 3 的结果

我昨天下定决心要解决这个问题,但是唉....我已经尝试过让该功能正常工作,但没有任何结果。我搜索,阅读,研究,无济于事。选择器语句的语法似乎多种多样,因此我不确定 CEWP 是否存在语法错误或问题,它正在渲染生成函数。我尝试过的一些变体:

$('th[title="Title"]').css("width", "450px","important"); 
$('th[title="Title"]').css("width", "450px", "important");
$('th[title="Title"]').css('width', '450px', 'important');
$('th [title="Title"]').css("width", "450px", "important");
$("th [title='Title']").css("width", "450px", "important");  

一直在继续……所以我想我还有一些问题,我将不得不让它撒谎……

1) 是否有可能我没有引用正确的 JavaScript 源库?无论我引用哪个库或使用哪个代码,这些脚本都不会显示失败或语法问题,但也不起作用。目前我有这个参考....

<script src="http://code.jquery.com/jquery-latest.js"></script>

2) SharePoint CEWP 是否会以某种方式干扰 JQuery 编辑?我在另一篇文章中读到(找不到了);在进行编辑之前页面没有一直呈现的地方????

更新 4 信息

我将逻辑更改为以下内容以尝试确保....没有区别

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">  

$(function()  
{  
   $(document).ready(function() {
    //Get the th that has a title attribute and it contains the value Title 
    $('th[title="Title"]').css("width", "450px","important");  
    });
});
</script>

【问题讨论】:

  • 我过去没有使用过共享点,但是我没有看到选项 1 或 2 的问题,但我确实看到了选择器的问题。可以分享一下该栏目的html吗?
  • 更新了帖子以显示正在运行的代码和 JSGridControl Web 部件的 HTML。我已经搜索了一个 JSGrid 方法来设置列宽......看起来除了那个之外还有一个方法。感谢您的帮助

标签: jquery sharepoint-2010


【解决方案1】:

终于搞定了....下面的最终脚本执行了我需要的所有操作(供其他人将来参考)。非常感谢你和我在一起并帮助我。结合您的逻辑和我的代码上的一些语法清理,我们解决了它。再次感谢,如果没有帮助,我会再挣扎很多天!

<script src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
JSRequest.EnsureSetup();
    //ensure document is ready
    $(document).ready(function() 
    {
        ExecuteOrDelayUntilScriptLoaded(function() 
        { 
            var oldGanttControl = SP.GanttControl; 
            SP.GanttControl = function() 
            { 
                oldGanttControl.call(this); 
                var oldInit = this.Init; 
                this.Init = function(jsGridControl, jsRawGridData, params) 
                { 
                    oldInit.call(this, jsGridControl, jsRawGridData, params); 
                    DoCustomizations(jsGridControl); 
                }; 
            }; 
        },"SPGantt.js"); 
    });

    function DoCustomizations(grid) 
    {
        grid.SetSplitterPosition(725); //set the splitter position
        grid.SetGanttZoomLevel(grid.GetGanttZoomLevel()+2); //set the zoom level
        $("th[title='Title']").css("width", "450px","important"); // set the column width
    }
</script>

【讨论】:

  • 太好了,现在有解决问题的办法了。
【解决方案2】:

尝试将选择器更改为::

<script type="text/javascript"> 
$(function() 
{ 
    //Get the th that has a title attribute
    $("th[title]").css("width", "450px","important"); 
});
</script>

更新

这个css reference sheet 是否包含对您需要的元素的引用?还要检查选择器。

另外,你能不能把生成的 HTML 贴出来,而不是生成函数?

更新两个

好的,根据生成的代码,我在jsfiddle 中做了一个结构示例,并且我还在css 属性中添加了important 以确保是否可行。尽管您可能需要更改示例以使其适合您(您在 th 中有 div,因此您可能需要将这些 div 更改为)我正在再次更新代码,以便您可以尝试这样做(更改了T for t in title)。

更新三

谢谢你,我知道你不需要元素只具有属性title,但它包含Title。有很多选项可以找到属性值,但我通常使用这三个:

描述:选择具有指定属性且值等于给定字符串或以该字符串开头后跟连字符 (-) 的元素。

描述:选择具有指定属性且值包含给定子字符串的元素。

说明:选择具有指定属性且值与某个值完全相等的元素。

在我们的具体情况下,我建议您使用第三个选项。我将编写一个新的块代码来保留更多的帖子历史记录。

<script type="text/javascript"> 
$(function() 
{ 
    //Get the th that has a title attribute and it contains the value Title
    $('th[title="Title"]').css("width", "450px","important"); 
});
</script>

希望它现在终于修复了。

更新四

准备好将您的 jquery 代码放入 jquery 文档中了吗?

更新五

我一直在读到使用$ 可能会发生冲突,因此请尝试改用jQuery

<script type="text/javascript"> 
   jQuery(function(){ 

      //Get the th that has a title attribute and it contains the value Title
      jQuery('th[title="Title"]').css("width", "450px","important"); 

   });
</script>

【讨论】:

  • 不行.... JSGrid 的列宽似乎设置为元数据的一部分。我不想全部发布..它不适合。但是,这里是设置列宽的地方。 ,\"fieldKeys\":[\"Title\"],\"columnKey\":\"Title\",\"name\":\"Title\",\"width\":100}
  • 我贴在pastebin里,columnKey几乎在脚本的底部。 pastebin.com/xPZN4PqX
  • 其他人报告了同样的问题:linklink 是几个例子。在我们努力的过程中,我会继续寻找。感谢您的帮助。布莱恩
  • 谢谢...我尝试了上面修改过的脚本...不要再去了。我已经在pastbin 中发布了生成的 HTML(用于我们的目标区域),在创建之前将列宽设置为 449。它只是在原始负载时默认回到 100。我之前没有 CSS 参考表...初次通过,我没有看到参考...将在 2010 年部分更深入地了解。
  • 我们越来越近了,问题肯定出在选择器上。 “th[Title]”没有得到标题列上的句柄......但是,我已经使用 IE Developers 工具栏验证我可以将 ONE 行更改为 450px 并且它可以正确呈现(不需要做div 部分)。我已将为 JSGrid 控件生成的整个 HTML 放在 pastebin 上。第 102 行是我唯一需要捕获和更改的地方……这篇文章在我使用开发人员工具栏进行更改后显示了它。谢谢你和我在一起......我学到了更多我想的......感谢所有
【解决方案3】:

SharePoint 中的 TH 标记不包含标题属性。

【讨论】:

    【解决方案4】:

    这可能只是对 BryanB 的回答的评论,但是我缺乏声誉,我相信其他人会从中受益,所以就这样吧。

    我使用了 BryanB 发布的解决方案,但是仅更改 css 宽度并没有更改网格存储的内部宽度。这导致了不同的问题:

    1. 可以在其中选择排序的列下拉菜单没有从原来的 100 像素默认位置移动
    2. 通过拖动调整列宽时,会跳转到原来的 100px 默认位置,然后正常调整。

    解决方法是在初始化网格之前调整 jsRawGridData 变量中的列宽。我只让它与直接数组引用一起工作,但是标题在那里,所以最坏的情况是一个简单的循环将允许您按列标题而不是位置设置宽度。

    <script src="http://code.jquery.com/jquery.min.js"></script>
    <script type="text/javascript">
    JSRequest.EnsureSetup();
        //ensure document is ready
        $(document).ready(function() 
        {
            ExecuteOrDelayUntilScriptLoaded(function() 
            { 
                var oldGanttControl = SP.GanttControl; 
                SP.GanttControl = function() 
                { 
                    oldGanttControl.call(this); 
                    var oldInit = this.Init; 
                    this.Init = function(jsGridControl, jsRawGridData, params) 
                    { 
                        FixColumnWidth(jsRawGridData);
                        oldInit.call(this, jsGridControl, jsRawGridData, params); 
                        DoCustomizations(jsGridControl); 
                    }; 
                }; 
            },"SPGantt.js"); 
        });
    
        function FixColumnWidth(data)
        {
            data.Columns[1].width=450;
        }
    
    
        function DoCustomizations(grid) 
        {
            grid.SetSplitterPosition(725); //set the splitter position
            grid.SetGanttZoomLevel(grid.GetGanttZoomLevel()+2); //set the zoom level
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2013-01-11
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多