从字符串jQuery中提取前n个单词,jQuery中的Wordpress样式摘录(x个单词数

从字符串jQuery中提取前n个单词,jQuery中的Wordpress样式摘录(x个单词数,jquery,wordpress,extract,Jquery,Wordpress,Extract,我有一个小的jQuery代码段可以工作,但是为了改进我的JS,我想听听关于如何提高其效率的建议 此函数缩短WordPress摘录。它获取原始WordPress摘录并提取前40个单词,这是我关心的部分。之后,它在原始摘录的末尾添加“继续阅读”链接,并将其添加到截断版本的末尾 再一次,我只是想知道返回被截断的摘录的更快/更简洁的方法是什么 jQuery('.page-id-7 .promo_slider_excerpt').each(function (i) { var s = jQuery

我有一个小的jQuery代码段可以工作,但是为了改进我的JS,我想听听关于如何提高其效率的建议

此函数缩短WordPress摘录。它获取原始WordPress摘录并提取前40个单词,这是我关心的部分。之后,它在原始摘录的末尾添加“继续阅读”链接,并将其添加到截断版本的末尾

再一次,我只是想知道返回被截断的摘录的更快/更简洁的方法是什么

jQuery('.page-id-7 .promo_slider_excerpt').each(function (i) {
    var s = jQuery(this).html();
    var sw = s.split(' '); // separate contents into array of words
    var t = [];
    var v;
    if (sw.length > 40) {
        var a = jQuery(this).children('a'); // this is the Continue Reading link
        for (v = 0; v < 40; v++) {
            t = (t + ' ' + sw[v]); // Build the shortened excerpt (this is the part I wanted to improve)
        }
        t = (t + ' ' + a[0].outerHTML); // Add the Continue Reading onto the end
        jQuery(this).html(t);
    } else {
        t = s;
        jQuery(this).html(t);
    }
});
jQuery('.page-id-7.promo\u slider\u摘录')。每个(函数(i){
var s=jQuery(this.html();
var sw=s.split(“”);//将内容分隔为单词数组
var t=[];
var v;
如果(开关长度>40){
var a=jQuery(this).children('a');//这是继续读取链接
对于(v=0;v<40;v++){
t=(t+''+sw[v]);//构建缩短的摘录(这是我想要改进的部分)
}
t=(t+''+a[0].outerHTML);//将继续读取添加到末尾
jQuery(this).html(t);
}否则{
t=s;
jQuery(this).html(t);
}
});

对于前四十个单词和继续阅读链接,我建议:

var s = jQuery(this).text(),
    fortyWords = s.split(' ').slice(0,39).join(' '),
    link = document.createElement('a'),
    linkText = document.createTextNode('continue reading');
link.href = 'http://path.to.article/';
link.appendChild(linkText);
$(this).text(fortyWords).append(link);


编辑以回答OP的进一步问题(在评论中,如下所示):

1:Firebug中有没有一种方法可以说明一种技术与另一种技术的效率?IOW:你的例子看起来不错,但是我可以比较一下它的内存和速度与我的for循环吗

老实说,我不知道,恐怕我根本没有真正使用Firefox,虽然我几乎只使用Chromium,但我还没有用足够长的时间来发现用于内存使用或速度的评测工具

然而,有一种方法可以让您运行测试来显示特定方法的运行速度;尽管它根本不涉及内存使用

2:我的版本使用了
.html()
方法和
.outerHTML
属性。我一直在网上看到一些帖子,这些帖子并不总是可靠的。这是IE6留下来的吗?我的用户都很新,所以我想知道为什么你选择使用
.text()
然后附加一个节点

html()
是一种很好的使用方法,但理想情况下,仅当您希望使用字符串格式的html时才使用;在上面的例子中,使用字符串似乎更容易,因为我真正想要使用的是文本字符串。元素中是否有其他元素的
text()
我在操作,然后我不得不使用
html()
否则在将文本写入/替换到DOM中时,这些元素会被过度写入

我似乎还记得,从历史上,坦率地说,从经验上来说,我在使用
outerHTML方面没有太大的成功。所以我很少想到使用它,尽管这只是个人喜好的问题。至于它是IE 6的遗留物?我不确定;我不会感到惊讶,但不幸的是,我一点也不知道

我选择使用
text()
,因为如上所述,我是在处理文本;然后我在
html()
中单独附加了节点,因为我插入了一个html节点。我是否使用
html()完全传递了相同的内容
那么,我认为它会起作用。但是,再次强调,这只是个人喜好,我认为,它清楚地表明了我是在操纵/使用文本还是html

参考资料:

  • jQuery:
  • “普通”非库JavaScript:

JQuery不应用于此目的。您可以根据需要使用过滤器修改摘录。让服务器完成以下工作:

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'new_excerpt_format');
function new_excerpt_format($text)
{
    global $post;
    $raw_excerpt = $text;
    if(!$text)
    {
        $text = get_the_content('');
        $text = strip_shortcodes($text);
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]&gt;', $text);

        $exceptions = ''; //PRESERVE CERTAIN TAGS, ADD/REMOVE AS NEEDED (ex: <p>,<a>,<em>,<strong>,<br>)
        $text = strip_tags($text, $exceptions);

        $maxCount = 55; //DEFAULT WP WORD COUNT, INCREASE/DECREASE AS NEEDED
        $excerpt_length = apply_filters('excerpt_length', $maxCount);

        $moreText = '.... <a href="'.get_permalink($post->ID).'">Read More &gt;&gt;</a>'; //CUSTOM MORE TEXT, CHANGE AS NEEDED
        $excerpt_more = apply_filters('excerpt_more', $moreText);

        $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length+1, PREG_SPLIT_NO_EMPTY);
        if(count($words) > $excerpt_length)
        {
            array_pop($words);
            $text = implode(' ', $words);
            $text = $text.$excerpt_more;
        }
        else
            $text = implode(' ', $words);
    }
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
remove_filter('get_the_extract'、'wp_trim_extract');
添加过滤器(“获取摘录”、“新摘录格式”);
函数新摘录格式($text)
{
全球$员额;
$raw_摘录=$text;
如果(!$text)
{
$text=获取内容(“”);
$text=strip\u短代码($text);
$text=apply_filters('the_content',$text);
$text=str_replace(']]>',']]]',$text);
$exceptions='';//保留某些标记,根据需要添加/删除(例如:,”;//自定义更多文本,根据需要更改
$extract\u more=应用过滤器($extract\u more',$moreText);
$words=preg_split(“/[\n\r\t]+/”,$text,$extract_length+1,preg_split_NO_EMPTY);
如果(计数($words)>$extract\u长度)
{
数组_pop($words);
$text=内爆(“”,$words);
$text=$text.$extract\u更多;
}
其他的
$text=内爆(“”,$words);
}
返回apply_filters('wp_trim_extract',$text,$raw_extract);
}

只需将此文件添加到functions.php文件中,它就可以满足您的所有需要。如果有帮助,请告诉我。

谢谢您的帮助。不幸的是,我不能在这里使用此文件,因为我所做的是摘录。IOW:我正在尝试获取已定制摘录的子字符串。嗯,您可以使用它,但这意味着它(或注释掉)任何现有的摘录过滤器。我只是相信使用jQuery处理与jQuery无关的问题是一种不好的做法,所以这是一种替代方法。这并不是说@DavidThomas的答案没有用处。如果他的答案解决了您的问题并帮助您更好地理解jQuery,那么请接受他的答案回答。别误会我…我-很感激。我的主要目标是在这个网站上深入了解JS。就像我做的很多项目一样。我被鼓励-添加到,但不要-更改-如果可能的话。如果这有意义的话。不,我完全理解。别担心。这么做的目的是学习,如果Javascript/jQuery的答案能够让你学习rn Javascript/jQuery甚至更多