【问题标题】:Editing Div content within jQuery textarea在 jQuery textarea 中编辑 Div 内容
【发布时间】:2012-06-14 11:05:07
【问题描述】:

我正在使用 Dmxzones Advanced HTML Editor 3,它插入以下代码:

<textarea id="advHTMLEdit1" name="advHTMLEdit1" class="dmxEditor" style="width:700px;height:300px"></textarea>

 jQuery(document).ready(
   function()
     {
       jQuery("#advHTMLEdit1").dmxEditor(
         {"width": 700, "lineBreak": "p", "allowUpload": true, "uploadPath": "tmp", "subFolder": "1", "uploadProcessor": "php", "allowResize": true, "includeCss": "tutorial.css", "skin": "blue"
       );
     }
 );

它使用 javascript execCommand() 插入元素,并将类样式应用于这些元素。

与:jQuery("#advHTMLEdit1")[0]

我似乎能够访问它,但我尝试过的任何方法都无法让我访问 childNodes。我希望能够遍历编辑器创建的每个 childNode,查询类,如果它是特定的 className,则替换该元素上的 HTML。

我不使用 jQuery,虽然我自己尝试了很多事情,但我似乎无法访问编辑器创建的任何这些元素。

【问题讨论】:

  • 你能发布生成的HTML吗?这将提供更清晰的画面。
  • 页面的HTML代码框如上,是你的意思吗?
  • 不,我的意思是在浏览器中生成的最终HTML。只需右键单击页面,然后单击View Page Source 或类似的内容,具体取决于您的浏览器。
  • textarea 元素不能有子元素(afaik),因此生成的 HTML 更有可能存储在其他地方(除非在提交表单之前它根本不存储)。如果您使用 DOM 检查器 (F12),您应该能够找到它的存储位置。

标签: javascript jquery html-editor


【解决方案1】:

this 答案中借用一点,并根据您提供的链接,您应该执行以下操作:

如果您想为所有匹配的类应用一致的css

var ifrm = $("#advHTMLEdit1").prev(".dmx-editor-frame-wrapper").find("iframe")[0];
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
ifrm = $(ifrm.document);
ifrm.find(".yourClass").css("cssProperty", "cssValue");

如果你想为所有元素应用不同的css

var ifrm = $("#advHTMLEdit1").prev(".dmx-editor-frame-wrapper").find("iframe")[0];
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
ifrm = $(ifrm.document);
var elem;
ifrm.find("body *").each(function(){
    elem = $(this);        
    if(elem.hasClass("yourClass") && elem.is("span")) {
        //elem.css("cssProperty", "cssValue");                
        elem.text("new text");
    }
});

如果你想改变所有具有某个类的span的文本,你可以用更短的代码执行以下操作,无需循环:

ifrm.find("span.myClass").text("new text");

仅当 span 的新文本依赖于 class 名称时,才使用第二个示例。

编辑: 根据您在页面中提供的示例,您可以编写:

ifrm.find("p.codeblock").text("new text");

【讨论】:

  • 我一直在尝试实现这一点,在您的第二个示例中,我如何获得 innerHTMl 并替换?即:elem.innerHTML = '一些文本';
  • @CraigStewart 我已根据您的要求更新了第二个示例。
  • @CraigStewart 抱歉,我在示例中漏掉了一行。我也更新了整个示例,它现在应该可以工作了。
  • 好的,但可以插入为 html,原因是我将使用 pears text_highlight 类,因此代码块类中的任何用户输入都将通过 ajax 替换为 div已应用语法高亮显示。
  • 啊,elem.html 有效,非常感谢您的帮助和时间。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
相关资源
最近更新 更多