HTML / Javascript cambia contenuto div


222

Ho un semplice codice HTML con un po 'di javascript, sembra:

<html>

<head>
  <script type="text/javascript">
    function changeDivContent() { // ...
    };
  </script>
</head>

<body>

  <input type="radio" name="radiobutton" value="A" onClick="changeDivContent()">
  <input type="radio" name="radiobutton" value="B" onClick="changeDivContent()">

  <div id="content"></div>

</body>

</html>

Volevo solo essere in grado di modificare il contenuto del div (è html interno) selezionando uno dei pulsanti di opzione "A" o "B", ma div # content non ha l'attributo javascript "value", quindi sto chiedendo come può essere fatto.

Risposte:


441

Supponendo che tu non stia usando jQuery o qualche altra libreria che ti semplifica questo genere di cose, puoi semplicemente usare la proprietà innerHTML dell'elemento.

document.getElementById("content").innerHTML = "whatever";

6
In una nota a margine, document.getElementById("content").innerText = "<b>bold text?</b>";si comporterà in modo diverso, e talvolta abbastanza utile, adocument.getElementById("content").innerHTML = "<b>bold text?</b>";
Isaac

25
Si prega di utilizzare innerHTMLanziché innerTexte textContentperché innerHTMLè compatibile con tutti i browser.
Minh Triet,

11
Avvertimento! l'utilizzo di innerHTMLpuò facilmente portare a vulnerabilità XSS quando il valore proviene da un input non attendibile. L'utilizzo di innerTextè sempre consigliato per motivi di sicurezza e attualmente è supportato da tutti i browser ( caniuse.com/#feat=innertext )
Mirko Conti

posso assegnare un altro elemento div tramite innerHTML, qualcosa come document.getElementById ("foo"). innerHTML = <div> ... </div>
Fayaz

26
$('#content').html('whatever');

Grazie per questo stavo cercando di utilizzare replace_html ma questo sembrava risolvere il mio problema. Qualche idea sul perché?
Tall Paul

2
Questa è la soluzione jQuery.
Ivo

14

Ottieni l'ID del divcontenuto di cui desideri modificare, quindi assegna il testo come di seguito:

  var myDiv = document.getElementById("divId");
  myDiv.innerHTML = "Content To Show";

2
Benvenuto in Stackoverflow! Fornire un po 'di spiegazione quando scrivi codice nella tua risposta è molto più utile del semplice codice.
George Netu

11

puoi usare la seguente funzione di supporto:

function content(divSelector, value) {
    document.querySelector(divSelector).innerHTML = value;
}

content('#content',"whatever");

Dove #contentdeve essere un selettore CSS valido

Ecco un esempio funzionante .


Inoltre - oggi (2018.07.01) ho confrontato la velocità per le soluzioni jquery e pure js (MacOs High Sierra 10.13.3 su Chrome 67.0.3396.99 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64 bit)):

document.getElementById("content").innerHTML = "whatever"; // pure JS
$('#content').html('whatever');                            // jQuery

inserisci qui la descrizione dell'immagine

La soluzione jquery era più lenta della soluzione js pura: 69% su firefox, 61% su safari, 56% su chrome. Il browser più veloce per js puro era Firefox con 560 milioni di operazioni al secondo, il secondo era safari 426M e il più lento era chrome 122M.

Quindi i vincitori sono pure js e firefox (3 volte più veloci di chrome!)

Puoi testarlo sulla tua macchina: https://jsperf.com/js-jquery-html-content-change


2
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <input type="radio" name="radiobutton" value="A" onclick = "populateData(event)">
  <input type="radio" name="radiobutton" value="B" onclick = "populateData(event)">

    <div id="content"></div>
</body>
</html>

----------------- Codice JS- ------------

var targetDiv = document.getElementById('content');
    var htmlContent = '';

    function populateData(event){
      switch(event.target.value){
        case 'A':{
         htmlContent = 'Content for A';
          break;
        }
        case 'B':{
          htmlContent = "content for B";
break;
        }
      }
      targetDiv.innerHTML = htmlContent;
    }

Step1: on click of the radio button it calls function populate data, with event (an object that has event details such as name of the element, value etc..);

Step2: I extracted the value through event.target.value and then simple switch will give me freedom to add custom text.

Codice live

https://jsbin.com/poreway/edit?html,js,output


0

cambiare su Fare clic su onClick="changeDivContent(this)"e provare

function changeDivContent(btn) {
  content.innerHTML = btn.value
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.