【问题标题】:Add 'whatever' to string in Javascript在Javascript中将'whatever'添加到字符串
【发布时间】:2013-10-09 01:45:43
【问题描述】:

我有一个用 CKEDITOR 替换 textarea 的 Javascript 函数。

document.getElementById("text").action=CKEDITOR.replace(
         'body_content',
         {toolbar : 'big',
          height : '450',
          enterMode : CKEDITOR.ENTER_BR}
);

现在我想在同一个函数上用 CKEDITOR 替换 3 个文本区域。这 3 个区域的名称为 body_contentSOMETHING。

如何编写一个表达式来用任何东西替换 SOMETHING?

编辑: 任何未定义的。应该是 windows 文件研究中的 *.exe 之类的东西

【问题讨论】:

    标签: javascript replace ckeditor


    【解决方案1】:

    假设body_content{{something}} 是id,您可以使用attribute selector 到select them 并循环:

    var content_areas = document.querySelectorAll('textarea[id^="body_content"]');
    
    for (var i = 0, l = content_areas.length; i < l; i++) {
        content_areas[i].action = CKEDITOR.replace(
             content_areas[i],
             {toolbar : 'big',
              height : '450',
              enterMode : CKEDITOR.ENTER_BR}
        );
    }
    

    为了与 IE 8 兼容,您可以使用 textarea[id|="body_content"](|= 与 ^=),但这要求该值是整数或后跟 -:

    <textarea id="body_content-something"></textarea>
    

    或者在要查询的元素中添加class:

    <textarea id="body_contentsomething" class="body_content"></textarea>
    
    var content_areas = document.querySelectorAll('.body_content');
    
    // ...
    

    另外,在不知道 document.getElementById("text") 应该指什么的情况下,我不知道如何将其保存在 sn-ps 中。

    【讨论】:

    • 这是一个比我更好的解决方案,如果你可以使用querySelectorAll。由于 OP 的示例和 cmets 指出无法使用连字符,因此我使用了手动 DOM 遍历方法。最后,两者都做同样的事情,这个只是更现代,更短一点。
    • 谢谢!这个解决方案很完美,唯一的问题是我使用document.getElementById("text").action,因为areas 包含在AJAX 回复中。如果我只发布标准 CKEDITOR 解决方案,则不会执行 JS。
    • 您可以访问content_areas[i].action 来完成作业,就像我在回答中所做的那样。
    • @Perocat 那么,document.getElementById('text') 到底是什么?我只能猜测如何在不知道更多的情况下提供帮助。如:是&lt;form&gt;吗?如果是这样,它的.action 只能保存来自 1 CKEDITOR.replace() 的值。那么,每个&lt;textarea&gt; 都有自己的&lt;form&gt; 吗? &lt;form&gt;s 是如何识别的?
    • @IngoBürk 完美,我使用了content_areas[i].action,效果非常棒!这是&lt;div&gt;:运行JS code 是必要的。现在我找到了解决方案!
    【解决方案2】:

    根据this SO thread 的回答,您可以像这样遍历 DOM (jsfiddle):

    function getElementsByIdStartsWith(selectorTag, prefix) {
        var items = [];
        var elements = document.getElementsByTagName(selectorTag);
        for (var i = 0; i < elements.length; i++) {
            if (elements[i].id.lastIndexOf(prefix, 0) === 0) {
                items.push(elements[i]);
            }
        }
    
        return items;
    }
    
    var affectedElements = getElementsByIdStartsWith("textarea", "body_content");
    for(var i = 0; i < affectedElements.length; i++) {
        affectedElements[i].action = CKEDITOR.replace( /* ... */ );
    }
    

    但是,这不是很有效,对我来说听起来像是一个 XY 问题。最好首先避免这种情况,例如通过标记要替换为通用类的文本区域。然后你可以简单地做

    var affectedElements = document.getElementsByClassName("common-class");
    

    【讨论】:

      【解决方案3】:
      var updatedString = originalString.replace(/SOMETHING$/g,"whatever");
      

      【讨论】:

      • 未定义的任何内容。在 windows 文件研究中应该是 *.exe 之类的东西
      • 如果你不知道要附加什么,你想如何附加?
      • 我不想附加任何东西。例如。我有 3 个文本区域 body_content_1234、body_content_test、body_content_3if。现在每个以body_content 开头的textarea 都应该替换为CKEDITOR,不管后面是什么
      猜你喜欢
      • 2011-08-10
      • 2013-05-07
      • 1970-01-01
      • 2014-11-29
      • 2020-02-16
      • 2017-12-08
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多