2015-05-08 4 views
2

Я использую плагин jquery для генерации текстового редактора. Этот редактор создает структуру, как это:получить содержимое iframe как строку

<div id="editor" ... > 
    ... 
    <iframe> 
     <!DOCTYPE html> 
     <html> 
     <head>...</head> 
     <body> 
      //some important content here and I need to get them 
     </body> 
     </html> 
    </iframe> 
</div> 

Теперь я хочу, чтобы получить все, что внутри тела Iframe в качестве строки. Я тестировал $("#editor").contents().find("body"), но это возвращает мне объект, а не строку. Также попробовал $("#editor").contents().find("body").outerHTML, но это вернет мне undefined. Как я могу это сделать? Пожалуйста, помогите мне. Спасибо за ваше время.

Edit:

Я использую SCEditor плагин. Как сказал Рамеш, я использовал метод val(), но все же вернул мне (an empty string) в консоль firebug. Вот мой код:

var instance = $("textarea").sceditor({ 
     plugins: "bbcode", 
     style: "../../editor/minified/jquery.sceditor.default.min.css", 
     //some othe options 
    }); 
    $("#save").click(function(){ 
     console.log(instance.val()); 
    }); 

Как говорит Рамеш, я использовал $('textarea').sceditor('instance').val(), и она работала.

+1

Что такое плагин вы используете. Скорее всего, он предоставит метод для извлечения содержимого текстового поля Rich. Я бы посоветовал не читать содержимое iframe напрямую. – Ramesh

+0

Я использую [SCeditor] (http: //www.sceditor.ком /). Я проверил api, но ничего полезного не нашел. – hamed

+0

Возможно, вам придется обновить свой вопрос, чтобы четко зафиксировать, что вам нужен контент из текстового поля с расширенным контентом, а не для iframe. Поскольку заголовок вводит в заблуждение, и ответы, которые вы получили до сих пор, предназначены для получения содержимого iframe. – Ramesh

ответ

1

В SCEditor, чтобы получить значение богатого текстового поля, вы должны использовать метод .val

Val() С: 1.3.5

Получает текущее значение редактора.

Это вернет отфильтрованный HTML из редактора WYSIWYG или нефильтрованное содержимое исходного редактора.

Если вы используете плагин, который фильтрует HTML, как плагин BBCode, этот вернет отфильтрованный HTML-код или BBCode в случае плагина BBCode .

Синтаксис

var val = instance.val();

Возврат Тип: String

Отфильтрованного значение редактора

+0

Благодарим вас за ответ. Но что такое «экземпляр» в вашем коде? – hamed

+0

@hamed try '$ ('textarea'). Sceditor ('instance'). Val()' – Ramesh

+0

Спасибо. Оно работает :) – hamed

1

объекты JQuery являются массив как объекты, и вы можете получить доступ к innerHTML свойство по индексу (взглянуть на выходе консоли):

console.log($('iframe')[0].innerHTML);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="editor"> 
 
    <iframe> 
 
     <!DOCTYPE html> 
 
     <html> 
 
     <head></head> 
 
     <body> 
 
      some important content here and I need to get them 
 
     </body> 
 
     </html> 
 
    </iframe> 
 
</div>

+0

Благодарим вас за ответ. Я тестировал, но показываю «пустую строку» в консоли. – hamed

+0

Я признаю, что не уверен, почему, я только что проверил в Firefox, Chrome и Spartan, и все они показывают. – jdphenix

1

Try:

var contain = document.getElementById('iframe').contentWindow.document.body.innerHTML ; 
// Use contain where need . 

Примечание: работайте только в том случае, если источник iframe находится в том же домене.

+0

Благодарим вас за ответ. Но iframe не имеет идентификатора, поэтому я не могу использовать 'getElementById'. – hamed

0

Я надеюсь, что это помогает:

// Gives you the DOM element without the outside wrapper you want 
$('.classSelector').html() 

// Gives you the inside wrapper as well 
$('.classSelector')[0].innerHTML