简体   繁体   中英

How do I make linebreaks for innerhtml content in a p tag using javascript

Basically I'm making a simple application in javascript that allows you to write in a weekday and then get the school classes that you have for that day. It works fine and outputs the text in the p tag when I enter the day. That's not my problem.

I'd like to know how I make the output (the classes) go in a list format sort of. Like it doesnt go next to eachother on one line. Instead it goes line by line with linebreaks basically. How do I make that happen?

 <body> <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <p id="lektioner"></p> <script type="text/javascript"> document.getElementById("print").onclick = function() { var måndagLektioner = "Engelska " + "Bild " + "Språk " + "Slöjd " + "Svenska"; var tisdagLektioner = "So " + "Språk " + "No" + " Matte" + " Musik " + "Svenska"; var onsdagLektioner = "Matte " + "So" + " Idrott" + " Engelska" + " No" + " Elevens val"; var torsdagLektioner = "No " + "Hemkunskap " + "So " + "Samling " + "No " + "Språk" var fredagLektioner = "Svenska " + "Matte " + "Idrott " + "So"; if (document.getElementById("dag").value == "måndag") { document.getElementById("lektioner").innerHTML = måndagLektioner; } if (document.getElementById("dag").value == "tisdag") { document.getElementById("lektioner").innerHTML = tisdagLektioner; } if (document.getElementById("dag").value == "onsdag") { document.getElementById("lektioner").innerHTML = onsdagLektioner; } if (document.getElementById("dag").value == "torsdag") { document.getElementById("lektioner").innerHTML = torsdagLektioner; } if (document.getElementById("dag").value == "fredag") { document.getElementById("lektioner").innerHTML = fredagLektioner; } } </script> </body> 

Solution 1: Use .split(' ').join('<br />'); after variables to replace (space) with <br /> (new line). This way you will have every word on a new line.

 document.getElementById("print").onclick = function() { var måndagLektioner = "Engelska " + "Bild " + "Språk " + "Slöjd " + "Svenska"; if (document.getElementById("dag").value=="måndag") { document.getElementById("lektioner").innerHTML = måndagLektioner.split(' ').join('<br />'); } } 
  <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <p id="lektioner"></p> 


Solution 2: Also, you can add a special character to make a difference between multiple words on same line, let's say we use | to separate them. You will do .split('|').join('<br />'); like below.

 document.getElementById("print").onclick = function() { var måndagLektioner = "Engelska|" + "Bild " + "Språk|" + "Slöjd|" + "Svenska"; if (document.getElementById("dag").value=="måndag") { document.getElementById("lektioner").innerHTML = måndagLektioner.split('|').join('<br />'); } } 
 <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <p id="lektioner"></p> 


Solution 3 : If you want to use other tags then <br /> you can do some functions that will surround your words by a tag. The example below is for an unordered list ul and with li childs.

 function insertTag(word, tag) { var result = '<' + tag + '>' + word + '</' + tag + '>'; return result; } function insertListTag(list, tag, innerTag) { var result = '<'+tag+'>'; for(var word in list) { result += insertTag(list[word], innerTag); } result += '</'+tag+'>'; return result; } document.getElementById("print").onclick = function() { var måndagLektioner = "Engelska|" + "Bild " + "Språk|" + "Slöjd|" + "Svenska"; if (document.getElementById("dag").value=="måndag") { document.getElementById("lektioner").innerHTML = insertListTag(måndagLektioner.split('|'), 'ul', 'li'); } } 
 <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <p id="lektioner"></p> 

While the other answer probably works well, I'm going to present a more correct way of doing what you mean.

You have a list of classes, a list is represented in JavaScript in the form of an array.

var måndagLektioner = ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"];

Then you can do things on that array (loop over it, join it into a string, etc).

You want a list representation on your document as well, for that we have 3 elements. The <ul> (unordered list) and <ol> (ordered list) as the parent, and <li> for each list item.

So let's loop over the array, create an <li> element for each item, and add that to the list

// Save all of your elements in variables, don't call getElementById
// more than once for the same element.
var print = document.getElementById("print");
var dag = document.getElementById("dag");
var lektioner = document.getElementById("lektioner");

// Use addEventListener, not onclick.
// This way you can have multiple event handlers on the same element.
print.addEventListener('click', function () {

    // Let's create an object. We can access a specific lesson array with
    // lessons["tisdagLektioner"] (for example)
    var lessons = {
        "måndagLektioner": ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"],
        "tisdagLektioner": ["So", "Språk", "No" + " Matte" + " Musik", "Svenska"],
        "onsdagLektioner": ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"],
        "torsdagLektioner": ["No", "Hemkunskap", "So", "Samling", "No", "Språk"],
        "fredagLektioner": ["Svenska", "Matte", "Idrott", "So"]
    }

    // There are better ways to clear an element. But let's stick with the basics.
    lektioner.innerHTML = '';

    // if you wrote an entry in dag that's in our object
    if (lessons[dag.value]) {
        // Iterate that array.
        lessons[dag.value].forEach(function(lesson) {
            // Inside this function, item in the array is called "lesson".

            // Create an LI
            var li = document.createElement('li');
            // Make the text equal to the current lesson
            li.textContent = lesson;
            // Append to the UL.
            lektioner.appendChild(li);
        });
    }

});

You can have a look here

I'd suggest amending your JavaScript somewhat, to the following approach:

document.getElementById("print").onclick = function() {

  // create an object containing all the days' lessons:
  var dagar = {
    måndagLektioner: "Engelska " + "Bild " + "Språk " + "Slöjd " + "Svenska",
    tisdagLektioner: "So " + "Språk " + "No" + " Matte" + " Musik " + "Svenska",
    onsdagLektioner: "Matte " + "So" + " Idrott" + " Engelska" + " No" + " Elevens val",
    torsdagLektioner: "No " + "Hemkunskap " + "So " + "Samling " + "No " + "Språk",
    fredagLektioner: "Svenska " + "Matte " + "Idrott " + "So"
  },
      // get the value once, not repeatedly, using trim()
      // to remove leading, and trailing white-space,
      // convert to lower case to account for capitalisation
      // differences:
      value = document.getElementById('dag').value.trim().toLowerCase();

  // set the elements innerHTML to the value returned from the
  // created object, replacing the found white-space sequences
  // with <br />:
  document.getElementById('lektioner').innerHTML = dagar[ value + 'Lektioner'].replace(/\s+/g,'<br />');

}

 document.getElementById("print").onclick = function() { var dagar = { måndagLektioner: "Engelska " + "Bild " + "Språk " + "Slöjd " + "Svenska", tisdagLektioner: "So " + "Språk " + "No" + " Matte" + " Musik " + "Svenska", onsdagLektioner: "Matte " + "So" + " Idrott" + " Engelska" + " No" + " Elevens val", torsdagLektioner: "No " + "Hemkunskap " + "So " + "Samling " + "No " + "Språk", fredagLektioner: "Svenska " + "Matte " + "Idrott " + "So" }, value = document.getElementById('dag').value.trim().toLowerCase(); document.getElementById('lektioner').innerHTML = dagar[ value + 'Lektioner'].replace(/\\s+/g,'<br />'); } 
 <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <p id="lektioner"></p> 

Further, though, I'd suggest using arrays within the object, which allows lesson-names to contain white-spaces ( "Elevens val" , for instance):

document.getElementById("print").onclick = function() {

  var dagar = {
    måndagLektioner: ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"],
    tisdagLektioner: ["So", "Språk", "No","Matte", "Musik", "Svenska"],
    onsdagLektioner: ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"],
    torsdagLektioner: ["No", "Hemkunskap" , "So" , "Samling", "No" , "Språk"],
    fredagLektioner: ["Svenska" , "Matte", "Idrott" , "So"]
  },
      value = document.getElementById('dag').value.trim().toLowerCase();

  document.getElementById('lektioner').innerHTML = dagar[ value + 'Lektioner'].join('<br />');

}

 document.getElementById("print").onclick = function() { var dagar = { måndagLektioner: ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"], tisdagLektioner: ["So", "Språk", "No","Matte", "Musik", "Svenska"], onsdagLektioner: ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"], torsdagLektioner: ["No", "Hemkunskap" , "So" , "Samling", "No" , "Språk"], fredagLektioner: ["Svenska" , "Matte", "Idrott" , "So"] }, value = document.getElementById('dag').value.trim().toLowerCase(); document.getElementById('lektioner').innerHTML = dagar[ value + 'Lektioner'].join('<br />'); } 
 <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <p id="lektioner"></p> 

And, frankly, since you're clearly working with an ordered list, I'd be remiss if I didn't suggest (and quite strongly) that you use an <ol> rather than a <p> :

document.getElementById("print").onclick = function() {

  var dagar = {
      måndagLektioner: ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"],
      tisdagLektioner: ["So", "Språk", "No", "Matte", "Musik", "Svenska"],
      onsdagLektioner: ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"],
      torsdagLektioner: ["No", "Hemkunskap", "So", "Samling", "No", "Språk"],
      fredagLektioner: ["Svenska", "Matte", "Idrott", "So"]
    },
    value = document.getElementById('dag').value.trim().toLowerCase(),
    // create a document fragment, to contain the HTML (rather
    // than forcing a redraw every time a new element is added):
    frag = document.createDocumentFragment(),
    // creating an <li> element:
    li = document.createElement('li'),
    // a named, but uninitialised, variable to use within the loop:
    clone;

  // using Array.prototype.forEach() to iterate over the lessons array:
  dagar[value + 'Lektioner'].forEach(function(lesson) {
    // cloning the created <li> (to avoid calling
    // document.createElement() multiple times):
    clone = li.cloneNode();

    // setting the text to the string held in the current
    // array-element over which we're iterating:
    clone.textContent = lesson;

    // appending the cloned <li> to the document fragment:
    frag.appendChild(clone);
  });

  // appending the document fragment to the element with the
  // id of 'lektioner':
  document.getElementById('lektioner').appendChild(frag);

}

 document.getElementById("print").onclick = function() { var dagar = { måndagLektioner: ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"], tisdagLektioner: ["So", "Språk", "No", "Matte", "Musik", "Svenska"], onsdagLektioner: ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"], torsdagLektioner: ["No", "Hemkunskap", "So", "Samling", "No", "Språk"], fredagLektioner: ["Svenska", "Matte", "Idrott", "So"] }, value = document.getElementById('dag').value.trim().toLowerCase(), frag = document.createDocumentFragment(), li = document.createElement('li'), clone; dagar[value + 'Lektioner'].forEach(function(lesson) { clone = li.cloneNode(); clone.textContent = lesson; frag.appendChild(clone); }); document.getElementById('lektioner').appendChild(frag); } 
 <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <ol id="lektioner"></ol> 

Also, rather than using element.onclick I'd suggest using HTMLElement.addEventListener() to be more standards-compliant:

function showDay() {

  var dagar = {
      måndagLektioner: ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"],
      tisdagLektioner: ["So", "Språk", "No", "Matte", "Musik", "Svenska"],
      onsdagLektioner: ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"],
      torsdagLektioner: ["No", "Hemkunskap", "So", "Samling", "No", "Språk"],
      fredagLektioner: ["Svenska", "Matte", "Idrott", "So"]
    },
    value = document.getElementById('dag').value.trim().toLowerCase(),
    frag = document.createDocumentFragment(),
    li = document.createElement('li'),
    clone;

  dagar[value + 'Lektioner'].forEach(function(lesson) {
    clone = li.cloneNode();
    clone.textContent = lesson;
    frag.appendChild(clone);
  });

  document.getElementById('lektioner').appendChild(frag);

}

// getting references to the <button> and the <input />:
var button = document.getElementById('print'),
    dayInput = document.getElementById('dag');

// adding the showDay() function as the event-handler for:
// the 'click' event on the <button>:
button.addEventListener('click', showDay);
// the 'change' event on the <input />:
dag.addEventListener('change', showDay);

 function showDay() { var dagar = { måndagLektioner: ["Engelska", "Bild", "Språk", "Slöjd", "Svenska"], tisdagLektioner: ["So", "Språk", "No", "Matte", "Musik", "Svenska"], onsdagLektioner: ["Matte", "So", "Idrott", "Engelska", "No", "Elevens val"], torsdagLektioner: ["No", "Hemkunskap", "So", "Samling", "No", "Språk"], fredagLektioner: ["Svenska", "Matte", "Idrott", "So"] }, value = document.getElementById('dag').value.trim().toLowerCase(), frag = document.createDocumentFragment(), li = document.createElement('li'), clone; dagar[value + 'Lektioner'].forEach(function(lesson) { clone = li.cloneNode(); clone.textContent = lesson; frag.appendChild(clone); }); document.getElementById('lektioner').appendChild(frag); } var button = document.getElementById('print'), dayInput = document.getElementById('dag'); button.addEventListener('click', showDay); dag.addEventListener('change', showDay); 
 <p>Skriv in en dag</p> <input id="dag" /> <button id="print">Klick</button> <ol id="lektioner"></ol> 

References:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM