Home > Software design >  How to read content of specyfic HTML element in JS/jQuery
How to read content of specyfic HTML element in JS/jQuery

Time:10-05

I've built webpage with car results from query (for school purposes).

The results are sth like that: (it depends on user input ofc)
MAKE | MODEL | YEAR | TYPE | IMAGE
Audi | A4 | 2017 | Sedan | link
Audi | S8 | 2016 | Sedan | link

I would like an image to be shown when the link is clicked but to make query I need value of make, model and year of this row. In my code, these divs contain cars data

$(".result-item").append('<div class="value v-make">'   car.make   '</div>');
$(".result-item").append('<div class="value v-model">'   car.model   '</div>');
$(".result-item").append('<div class="value v-year">'   car.year   '</div>');
$(".result-item").append('<div class="value v-type">'   car.type   '</div>');
$(".result-item").append('<div class="value image-link"><a onclick="loadImg()">click</a></div>');

And the function of getting image is
Showing result in console.log() is temporary

function loadImg() {
    var make, model, year;
    const settings = {
        "async": true,
        "crossDomain": true,
        "url": "https://bing-image-search1.p.rapidapi.com/images/search?q="   make   " "   model   " "   year   "&count=1&mkt=pl-PL",
        "method": "GET",
        "headers": {
            "x-rapidapi-host": "bing-image-search1.p.rapidapi.com",
            "x-rapidapi-key": "*key*"
        }
    };
    
    $.ajax(settings).done(function (response) {
        console.log(response);
    });
}

How do I get value of these divs to put it in variables in loadImg()?

CodePudding user response:

Consider the following example.

$(function() {
  function getCarImage(make, model, year) {
    $.ajax({
      async: true,
      crossDomain: true,
      url: "https://bing-image-search1.p.rapidapi.com/images/search",
      data: {
        q: make   " "   model   " "   year,
        count: 1,
        mkt: "pl-PL"
      },
      method: "GET",
      header: {
        "x-rapidapi-host": "bing-image-search1.p.rapidapi.com",
        "x-rapidapi-key": "*key*"
      },
      success: function(results) {
        console.log(results);
      }
    });
  }

  $("table tbody a").click(function(event) {
    event.preventDefault();
    var $self = $(this);
    var $row = $self.closest("tr");
    getCarImage($(".make", $row).text(), $(".model", $row).text(), $(".year", $row).text());
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>MAKE</th>
      <th>MODEL</th>
      <th>YEAR</th>
      <th>TYPE</th>
      <th>IMAGE</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="make">Audi</td>
      <td class="model">A4</td>
      <td class="year">2017</td>
      <td class="type">Sedan</td>
      <td><a href="#" class="getImage">Img Link</a></td>
    </tr>
    <tr>
      <td class="make">Audi</td>
      <td class="model">S8</td>
      <td class="year">2016</td>
      <td class="type">Sedan</td>
      <td><a href="#" class="getImage">Img Link</a>
    </tr>
  </tbody>
</table>

This binds a click event to each A element in the rows. When clicked, it gathers all the details and passes them to the function.

CodePudding user response:

First of all, avoid the onclick passed as string in the HTML, and use proper event listening; this way you should already have all the data you need in the closure.

for (const car in cars) {
   const link = document.createElement('a');
   link.innerText = 'click';
   link.addEventListener('click', () => {
      // use car.make, car.year and so on
   });
   $(".result-item").append(link);
}

  • Related