Создайте текстовый файл с объединенной строкой с помощью флажков - PullRequest
0 голосов
/ 09 июля 2020

У меня проблема с представлением о способе создания текстового документа со значениями из нескольких флажков. Например:

Значение флажка 1: Lorem Ipsum - это просто фиктивный текст, используемый в полиграфической и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом в отрасли с 1500-х годов, когда неизвестный типограф взял гранку шрифта и скремблировал ее, чтобы сделать книгу образцов шрифта.

Значение флажка 2: Противоположно Согласно распространенному мнению, Lorem Ipsum - это не просто случайный текст. Он уходит корнями в классическую латинскую литературу из 45 B C, что делает его возрастом более 2000 лет.

Значение флажка 3: Это давно установленный факт, что читатель будет отвлекаться на читаемое содержимое страницы при просмотре ее макета.

После выбора флажков 1,2 и 3 сгенерированный текстовый документ должен выглядеть следующим образом:

Lorem Ipsum - это просто фиктивный текст полиграфической и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом в отрасли с 1500-х годов, когда неизвестный типограф взял гранку с шрифтом и скремблировал его, чтобы сделать книгу с образцами шрифта. Вопреки распространенному мнению, Lorem Ipsum не просто случайный текст. Он уходит корнями в классическую латинскую литературу из 45 B C, что делает его возрастом более 2000 лет.

Это давно установленный факт, что читатель будет отвлекаться на читаемое содержание страницы, когда глядя на его макет.

Может ли кто-нибудь дать мне решение по этому поводу. Простите за тупой вопрос. Помогите, пожалуйста

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 09 июля 2020

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

function SaveFile(){

    var data=[];

$("input:checkbox:checked").each(function(){
    data.push($(this).data('value'));
    data.push('\n'); //To Add a new line   
});
    
   var blob = new Blob([data],{ type: 'plain/text;charset=UTF-8' }),
        fileURL = URL.createObjectURL(blob),
        pom = document.createElement('a');

    pom.setAttribute('href', fileURL);
    pom.setAttribute('download', 'myfile.txt');
    pom.click();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" name="ck1" data-value="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."/>
<label for="ck1">Check 1</label>
<br/>

<input type="checkbox" name="ck2" data-value="Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old."/>
<label for="ck2">Check 2</label>
<br/>

<input type="checkbox" name="ck3" data-value="It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout."/>
<label for="ck3">Check 3</label>

<br/>

<input type="button" value="Save as file" onclick="SaveFile()"/>
0 голосов
/ 09 июля 2020

После получения выбранных абзацев вы можете отправить текст в новое окно как URL-адрес объекта:

window.open(URL.createObjectURL(new Blob([text], {
  type: 'text/plain;charset=utf-8'
})))

Демо

Примечание: Переполнение стека запрещает вызов window.open, но вы можете протестировать код самостоятельно в своей любимой среде IDE / веб-браузере.

const paragraphs = [
  "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.",
  "Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.",
  "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout."
]

const main = () => {
  populateCheckboxes(paragraphs, document.querySelector('.paragraphs'))
  document.querySelector('.btn-export').addEventListener('click', handleExport)
}

const handleExport = () => {
  const text = [...document.querySelectorAll('.checkbox-wrapper > input[type="checkbox"]')]
    .filter(checkbox => checkbox.checked)
    .map(checkbox => checkbox.value)
    .join('\n\n')
  
  // Initiate file download in a new window
  window.open(URL.createObjectURL(new Blob([text], {
    type: 'text/plain;charset=utf-8'
  })))
}

const populateCheckboxes = (paragraphs, target) => {
  paragraphs.forEach(paragraph => {
    let checkboxWrapper = document.createElement('div')
    let checkbox = document.createElement('input')
    let span = document.createElement('span')

    checkboxWrapper.classList.add('checkbox-wrapper')
    checkbox.setAttribute('type', 'checkbox')
    checkbox.value = paragraph
    span.textContent = paragraph

    checkboxWrapper.appendChild(checkbox)
    checkboxWrapper.appendChild(span)
    target.appendChild(checkboxWrapper)
  })
}

main()
.checkbox-wrapper {
  margin-bottom:  1em;
}

.checkbox-wrapper input[type="checkbox"] {
  margin-right: 1em;
}
<div class="paragraphs"></div>
<button class="btn-export">Export</button>

Живая демонстрация фильтрации

Это не экспортирует абзацы, но позволяет вам переключать их.

const paragraphs = [
  "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.",
  "Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.",
  "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout."
]

const toggleClick = e => {
  e.target.parentElement.classList.toggle('expanded')
  e.target.parentElement.querySelector('.togglable').classList.toggle('hidden')
}

paragraphs.forEach(paragraph => {
  let wrapper = document.createElement('p')
  wrapper.classList.add('expander', 'expanded')
  let toggler = document.createElement('span')
  toggler.classList.add('toggler')
  toggler.addEventListener('click', toggleClick)
  let content = document.createElement('span')
  content.classList.add('togglable')
  content.textContent = paragraph
  wrapper.appendChild(toggler)
  wrapper.appendChild(content)
  document.body.appendChild(wrapper)
})
.expander .toggler {
  display: inline-block;
  width: 1em;
  cursor: pointer;
  text-align: center;
  font-weight: bold;
}

.expander .toggler:before {
  content: "+";
}

.expander.expanded .toggler:before {
  content: "-";
}

.hidden {
  display: none;
}
0 голосов
/ 09 июля 2020

Одним из способов может быть добавление прослушивателя событий onclick к флажкам, избегая onchange из-за некоторых проблем, описанных здесь: { ссылка }

<input type="checkbox" value="whatever value you want">
<input type="checkbox" value="whatever value you want">
<input type="checkbox" value="whatever value you want">

<p id="textOutput"></p>

<script type="text/javascript">
    var p = document.getElementById("textOutput");
    document.querySelectorAll("input[type='checkbox']").forEach(function(el){
        el.addEventListener('click', function(){
            if (this.checked) {
                p.innerHTML += this.getAttribute("value") + "<br><br>";
            }
        });
    });
    //
    // You can add a button for the conversion and export
    // Read about how to convert an html content to a PDF or a text file
</script>

Прочтите этот ответ на как преобразовать в файл .txt и экспортировать / скачать: { ссылка }

...