缩短jQuery函数

时间:2009-09-24 09:35:12

标签: jquery sharepoint sharepoint-2007 sharepoint-designer

我编写了以下函数来从SharePoint网站中的html代码中删除不间断的空格(无论何时打开母版页或页面布局,SharePoint设计人员都会使用非破坏空格编写任何代码!最终消费你所有的时间都回去删除它们。)

无论如何,它似乎过长,我对jQuery很陌生,并想知道是否有更简洁的方法来执行相同的任务。

<script type="text/javascript">
    $(function(){
            $('h1').each( function() {  
        var $h = $(this);  
        var html = $h.html();  
        html = html.replace( '&nbsp;', '' );  
        $h.html( html );  
    });
}); 
$(function(){
            $('h2').each( function() {  
        var $h = $(this);  
        var html = $h.html();  
        html = html.replace( '&nbsp;', '' );  
        $h.html( html );  
    });
}); 
$(function(){
            $('h3').each( function() {  
        var $h = $(this);  
        var html = $h.html();  
        html = html.replace( '&nbsp;', '' );  
        $h.html( html );  
    });
}); 
$(function(){
            $('h4').each( function() {  
        var $h = $(this);  
        var html = $h.html();  
        html = html.replace( '&nbsp;', '' );  
        $h.html( html );  
    });
}); 
    $(function(){
            $('p').each( function() {  
        var $h = $(this);  
        var html = $h.html();  
        html = html.replace( '&nbsp;', '' );  
        $h.html( html );  
    });
}); 

    </script>

3 个答案:

答案 0 :(得分:4)

$(function() {
    $('h2, h3, h4, p').each(function() {
        var $h = $(this);
        var html = $h.html();
        html = html.replace( ' ', '' );
        $h.html( html );
    });
})

答案 1 :(得分:3)

您可以将所有这些组合成一个$(function() { ... });您没有太多理由将这些调用包装在自己的文档就绪事件处理程序中。

此外,您在许多元素上调用相同的功能,您可以将选择器与,结合使用,从而导致其他人提出的$('h2,h3,h4,h5').each(function() {....});更短。

缩短功能体:

var html = $h.html();
html = html.replace('&nbsp;', '');

可以在一行上完成:

var html = $h.html().replace('&nbsp;', '');

因为你只引用了足够长的时间来调用另一个函数 - 它甚至不需要存储在它自己的变量中:

$h.html($h.html().replace('&nbsp;', ''));

或者如果使用jQuery&gt; 1.4,使用新的函数语法:

$h.html(function(index, oldHtml) { return oldHtml.replace('&nbsp;', ''); });

当然 - 如果需要,跨多行的方法可以为你提供更多插入调试代码的地方,我通常会在验证它之后手动压缩这类东西。

将其设为插件

下一种方法对于这种情况来说有点过分,但可能会更深入地了解jQuery并创建“可重用”代码。

// generic replace in html function - proxies all the arguments to 
// .replace()
$.fn.replaceHtml = function() {
  var replaceArgs = arguments;
  // jQuery 1.4 allows
  return this.html(function(idx, oldHtml) {
    return oldHtml.replace.apply(oldHtml, replaceArgs);
  });
  // older versions / another way to write it
  // return this.each(function() { 
  //   var $t = $(this), html = $t.html();
  //   $t.html(html.replace.apply(html, replaceArgs));
  // });
};

// single task that uses the replaceHtml function
$.fn.removeNBSP = function() {
  return this.replaceHtml('&nbsp;', '');
};

$('h1,h2,h3,h4,h5,p').removeNBSP(); 

答案 2 :(得分:1)

$(function() {
   $('h2, h3, h4, p').html(function(){ return $(this).html().replace(" ", "") }) 
});