Получить содержимое из HTML-элемента в Rails - PullRequest
3 голосов
/ 15 марта 2010

Я ищу способ получить содержимое моего div в моем представлении Rails. Мне бы хотелось, чтобы в буквальном смысле HTML-контент, так что только HTML и без Rails
Я думал, что inner_html будет работать, но я получаю исключение RJS (TypeError: $ ("content"). InnerHtml не является функцией)

Кто-нибудь знает, как я могу получить контент? Спасибо!

В моем контроллере я использую этот код:

def save_test
    render :update do |page|
        page['content'].innerHTML
    end
end

Может быть, еще немного контекста? Я получаю HTML-форму (без самих тегов формы) и помещаю ее в форму рельсов. Я хочу, чтобы пользователь менял флажки, радиокнопки, заполнял поля ввода и т. Д., А когда пользователь сохраняет, я хочу, чтобы буквально измененное содержимое формы в виде строки сохраняло его в моей базе данных.
Причина этого заключается в том, что несколько предоставленных форм сильно различаются и используются только в качестве информации, для этого не нужно выполнять никаких расчетов и т. Д.
Итак, мой взгляд выглядит так:

form_remote_tag :url=>{:action => 'save_trainee_evaluation' do %>
<div id="content">
  <%= contract_trainer_trainee.evaluation_template %>
</div>
<%= submit_tag 'Opslaan' %>

Ответы [ 2 ]

2 голосов
/ 18 марта 2010

Код, который вы пытаетесь использовать (например, render :update do |page| и т. Д.), Предназначен для обновления страницы HTML (например, page['content'].innerHTML = 'Thank you, we received your data.'), а не для извлечения данных со страницы (что должно происходить при отправке формы).

Вариант 1) Просто используйте данные поля формы, которые были отправлены. (Вы не включили фактический пример, и я не могу сказать, есть ли другой контент, не являющийся формой, который вы хотите сохранить.) Я бы хотел сделать это путем преобразования хеша params в строку JSON и сохранения этого в текстовом поле в базе данных. Например. @evaluation.content = params.to_json.

Вариант 2) Включите полный HTML-код div в сообщение формы, скопировав его в скрытое поле при отправке формы. (Вам может потребоваться выполнить некоторую кодировку строки HTML, прежде чем поместить ее в скрытое поле.) Использование примера кода в качестве отправной точки:

<% form_remote_tag :url=>{:action => 'save_trainee_evaluation'}, :html => { :onsubmit => "$('content_inner_html').value = $('content').innerHTML;" } do %>
<%= hidden_field_tag 'content_inner_html', :id => 'content_inner_html' %>
<div id="content">
  <%= contract_trainer_trainee.evaluation_template %>
</div>
<%= submit_tag 'Opslaan' %>

Тогда в контроллере у вас будет блок HTML в params[:content_inner_html].

0 голосов
/ 15 марта 2010

Использование page["content"].innerHTML.

...