3

我觉得这是一个补救问题,但我已经战斗了好几天了……所以请原谅我。我在 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>
4

4 回答 4

2

Finally got it nailed....The finial script is below that does all the actions I was needing (for future reference of others). Thanks so much for hanging with me and helping me out. Combiniation of your logic and some syntax cleanup on my code and we got it resolved. Thanks Again, I would have struggled for many more days without help!

<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>
于 2012-08-23T15:32:53.297 回答
0

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

于 2013-03-14T12:21:15.447 回答
0

尝试将选择器更改为::

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

更新

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

另外,您可以发布生成的 HTML 而不是生成函数吗?

更新二

好的,基于生成的代码,我在jsfiddle中做了一个结构示例,并且我还添加了importantcss 属性以确保是否可以解决。尽管您可能需要更改示例以使其适合您(您在其中有 div,th因此您可能需要将这些 div 更改为),但我正在再次更新代码,以便您可以尝试这样做(更改了Tfor tin 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>
于 2012-08-19T01:18:13.003 回答
0

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

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

  1. 可以在其中选择排序的列下拉列表没有从原始 100px 默认位置移动
  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>
于 2016-09-29T17:18:23.310 回答