Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Updating the content of a div with javascript

Rather than trying to create tons of different pages on my website, I'm trying to update the content of a single div when different items in the navbar are click to update the maint div content. I tried to find a simple example using Javascript:

        <script type="text/javascript">
            function ReplaceContentInContainer(id,content) {
                var container = document.getElementById(id);
                container.innerHTML = content;
            }
        </script>


          <div id="example1div" style="border-style:solid; padding:10px; text-align:center;">
            I will be replaced when you click.
        </div>
        <a href="javascript:ReplaceContentInContainer('example1div', '<img src='2.jpg'>' )">
            Click me to replace the content in the container.
        </a>

This works just fine when I only try and update text, but when I put an img tag in there, as you can see, it stops working.

Either 1) what is the problem with how I am trying to do it? or 2) What is a better/easier way to do it?

I'm not stuck on Javascript. jQuery would work too, as long as it is just as simple or easy. I want to create a function that will just let me pass in whatever HTML I want to update and insert it into the div tag and take out the 'old' HTML.

like image 307
Russell Strauss Avatar asked Mar 10 '11 05:03

Russell Strauss


People also ask

Can we use JavaScript to modify HTML DOM?

The HTML DOM allows JavaScript to change the content of HTML elements.

Which of the following is the correct syntax to change the content div with id my div in JavaScript?

Explanation: The correct syntax to access the element is document. getElementById(“geek”). Here we want to access the content written under that id, so we used . innerHTML to specify that and finally we replaced the content with whatever is written inside the quotes.


2 Answers

You just have some escaping issues:

ReplaceContentInContainer('example1div', '<img src='2.jpg'>')
                                                   ^     ^

The inner ' need to be escaped, otherwise the JS engine will see ReplaceContentInContainer('example1div', '<img src=' plus some syntax errors resulting from the subsequent 2.jpg'>'). Change the call to (tip of the hat to cHao' answer concerning escaping the < and > in the HTML):

ReplaceContentInContainer('example1div', '&lt;img src=\'2.jpg\'&gt;')

A simple way to do this with jQuery would be to add an ID to your link (say, "idOfA"), then use the html() function (this is more cross-platform than using innerHTML):

<script type="text/javascript">
    $('#idOfA').click(function() {
        $('#example1div').html('<img src="2.jpg">');
    });
</script>
like image 74
Cameron Avatar answered Sep 20 '22 17:09

Cameron


First of all, don't put complex JavaScript code in href attributes. It's hard to read or to maintain. Use the <script> tag or put your JavaScript code in a separate file altogether.

Second, use jQuery. JavaScript is a strange beast: the principles underlying its patterns were not designed with modern-day web development in mind. jQuery gives you lots of power without miring you in JavaScript's oddities.

Third, if your goal is to avoid having to endlessly duplicate the same basic structure for all (or many) of your pages, consider using a templating system. Templating systems allow you to plug in specific content into scaffolds containing the common elements of your site. If it sounds complicated, it's because I haven't explained it well. Google it and you'll find lots of great resources.

Relying on JavaScript for navigation means your site won't be indexed properly by search engines and will be completely unusable to someone with JavaScript turned off. It is increasingly common--and acceptable--to rely on JavaScript for basic functionality. But your site should, at minimum, provide discrete pages with sensible and durable URLs.

Now, all that said, let's get to your question. Here's one way of implementing it in jQuery. It's not the snazziest, tightest implementation, but I tried to make something very readable:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery Example</title>
    <style type="text/css" media="all">
        /* all content divs should be hidden initially */
        .content {
            display: none;
        }

        /* make the navigation bar stand out a little */    
        #nav {
            background: yellow;
            padding: 10px;
        }
    </style>
</head>
<body>
    <!-- navigation bar -->
    <span id="nav">
        <a href="#about_me">about me</a> |
        <a href="#copyright">copyright notice</a> |
        <a href="#my_story">a story</a>
    </span>

    <!-- content divs -->
    <div class="content" id="about_me">
        <p>I'm a <strong>web developer</strong>!</p>
    </div>
    <div class="content" id="copyright">
        <p>This site is in the public domain.</p>
        <p>You can do whatever you want with it!</p>
    </div>
    <div class="content" id="my_story">
        <p>Once upon a time...</p>
    </div>

    <!-- jquery code -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script>
    // Wait for the document to load
    $(document).ready(function() {
        // When one of our nav links is clicked on,
        $('#nav a').click(function(e) {
            div_to_activate = $(this).attr('href'); // Store its target
            $('.content:visible').hide(); // Hide any visible div with the class "content"
            $(div_to_activate).show(); // Show the target div
        });
    });
    </script>
</body>
</html>

Ok, hope this helps! If jQuery looks attractive, consider starting with this tutorial.

like image 38
Ori Avatar answered Sep 21 '22 17:09

Ori