【问题标题】:Add needed inner shortcode if missing如果缺少,请添加所需的内部简码
【发布时间】:2015-03-03 13:20:42
【问题描述】:

我有以下代码:

<textarea class="content">
    [row]
        [col-md-12]
            text
        [/col-md-12]
    [/row]
    [row]
        text
    [/row]
</textarea>

现在我想在 [row] 内部(直接在之后)添加 [col-md-12] 并使用 jquery 在 [/row] 之前将其关闭。结果应该是这样的:

<textarea class="content">
    [row]
        [col-md-12]
            text
        [/col-md-12]
    [/row]
    [row]
        [col-md-12]
            text
        [/col-md-12]
    [/row]
</textarea>

(注意:上面的代码不是bootstrap!我只是用bootstrap,因为它更清楚,需要“col-md-12”!)

这是当前代码的 jsfiddle 示例: http://jsfiddle.net/Zoker/6mzrj1e7/

现在,在“转换”之后,第一个“[vc_row]”和结束“[/vc_row]”之前的“[/vc_column]”缺失了一个“[vc_column width="1/1"]”。 这就是我需要添加的简码。我不知道如何证明,如果它丢失并添加它然后......

我还必须在按钮上单击 3 次才能完全更新内容。 1 单击后如何使其工作? (编辑:用https://stackoverflow.com/a/1145525/2977288 修复的那个)

【问题讨论】:

  • 您尝试使用的 javascript 在哪里?
  • 我考虑了这个问题 2 天,但没有找到任何可行的解决方案。我没有任何工作方法:/
  • 真的不清楚你的更高级别的问题是什么。您是否正在尝试创建编辑器?
  • 我想创建一个转换器,它首先将 [shortcode1] 转换为 [shortcode2](我可以正常工作),然后添加缺少的内部简码 [inner-shortcode1](如果它缺失)。跨度>
  • 如果没有你提供你的代码,我不知道有什么人可以帮助你

标签: jquery wordpress shortcode


【解决方案1】:

LIVE:

很难实现:(希望有帮助)


// auto_descritive
function wrap_string( str, open_param, close_param ){
    var text = $(".content").text();

    // all indexes of str
    var re = new RegExp(str,'gi'), results = [];
    while (re.exec(text)){
        results.push(re.lastIndex);
    }

    // check each parent param of each str
    for (var i=0; results[i]; i++) {
        var y_param = text.substring(0, results[i]).lastIndexOf(']')+1;
        var x_param = y_param - open_param.length;
        var lastParam = text.substring(x_param, y_param);
        var half1 = text.substring(0, y_param);
        var half2 = text.substring(results[i]+str.length, text.length);
        if (lastParam != open_param) {
            text = half1 + open_param + str + close_param + half2;
            $(".content").text( text );
            // return true if one was wrapped
            return true;
        }
    }

    // return false in case nothing was wrapped
    return false;

}


// wrap all "text" with "[col-md-12] /"
while( wrap_string( "text", "[col-md-12]", "[/col-md-12]" ) );

【讨论】:

  • 这是添加它的好方法 :) 唯一的问题是,我首先需要检查 [row] 的下一个元素是否已经是 [col-md-*] 并且只添加它,如果没有。
  • 我需要类似的东西:如果 '[' 和 ']' = 'row' 之间的文本然后检查 ']' 之后的下一个元素是否是 '[col-md-*'
  • 哥们你真棒!!!如果简码是 [row],是否有任何测试?唯一的问题是,该脚本无法按预期 100% 工作:jsfiddle.net/Zoker/6mzrj1e7/11
  • 这里是一个扩展的解释:pastebin.com/Gn29JrdZ 再次感谢您的出色工作!希望你明白我想做什么:)
  • 但是所有内容当前都被替换为“文本”并且文本被 [vc_column width="1/1"] 包裹,但它已经被 [vc_column width="1/3 "] (正文周围只有一个包装器)。您是否阅读了 pastebin 文本?
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2017-08-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多