This method is part of a module; And despite the error...
Uncaught TypeError: Cannot read property '1' of null(…) 
works to a small degree, however it appears to have blocked an additional method on the module.
This is a fiddle which contains the whole module.
searchURL: function() {
  function insertAfter(newNode, referenceNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
  }
  var link, url, parser, newPathName = '',
    newstr = '',
    doc = document,
    avon_rep_container = doc.getElementById('avon_rep_container'),
    avon_rep_container_id,
    avon_rep_container_links,
    avon_rep_container_images,
    documentTableWrapper,
    docBodyFirstChild,
    full_width_container_1 = doc.getElementsByClassName('full-width-container')[1],
    full_width_img_class_el = doc.getElementsByClassName('full-width-img')[0];
  if (!avon_rep_container) {
    avon_rep_container = doc.createElement('div');
    avon_rep_container.setAttribute('id', 'avon_rep_container');
    avon_rep_container.className = 'container-avon-representative-news';
    avon_rep_container_links = avon_rep_container.getElementsByTagName('a');
    avon_rep_container_id = doc.getElementById('avon_rep_container');
    docBodyFirstChild = doc.body.firstChild;
    documentTableWrapper = doc.getElementsByClassName('marginfix')[0];
    avon_rep_container.appendChild(documentTableWrapper);
    doc.body.appendChild(avon_rep_container);
    full_width_container_1.removeChild(full_width_container_1.getElementsByTagName('table')[0]);
    full_width_img_class_el.removeAttribute('style');
  } else {
    avon_rep_container_links = doc.getElementById('avon_rep_container').getElementsByTagName('a');
  }
  avon_rep_container_images = avon_rep_container.getElementsByTagName('img');
  for (var i = 0; i < avon_rep_container_images.length; i++) {
    var images = avon_rep_container_images[i];
    images.src = '/dam/avon-us/landing-pages/rep-news/' + images.src.split('/').pop();
    if (avon_rep_container_images[i].width == "538") {
      avon_rep_container_images[i].style.width = "538px";
    }
    if (avon_rep_container_images[i].width == "258") {
      avon_rep_container_images[i].style.width = "258px";
    }
    avon_rep_container_images[i].style.width = 'inherit';
    avon_rep_container_images[i].style.margin = 'auto';
  }
  //for (var i = 0, len = arguments.length; i < len; i++) { // Using a for loop to allow unlimited arguments to be passed in
  //instead collect all necessary urls
  url = getURL(arguments); //[i]); // We are calling the publicApi.getURL() method and passing the looped argument from above
  for (var j = 0, jlen = avon_rep_container_links.length; j < jlen; j++) { // This loop goes over the whole documents links...
    link = avon_rep_container_links[j];
    var domain = link.href.match(/(https?:\/\/.+?)\//)[1];
    if ((url.indexOf(domain) !== -1) && (!link.href.match(/\.(pdf)/gi))) { // //...and we are checking each argument passed in to see if it matches the object value stored in the getURL function e.g. like a switch statement..
      parser = document.createElement('a'); //...if so we are essentially adding a blank tag to all the documents in the document
      parser.href = link.href;
      link.setAttribute('target', '_self');
      newPathName = parser.pathname;
      console.log(domain);
      if (newPathName.search(/Executive|District|Division|National/) != -1) { // Added check for these strings for SMO page
        newPathName = newPathName.split('/').pop();
        newstr = newPathName;
      } else {
        newstr = newPathName;
      }
      link.href = newstr;
    } else {
      link.setAttribute('target', '_blank');
    }
  }
  //}
}
Can one explain what the error means in context to my Module, can't seem to understand it.
Thanks any help will be appreciated!
Update
This is where the error is occurring:
var domain=link.href.match(/(https?:\/\/.+?)\//)[1];
                The "Cannot read property 'click' of null" error occurs when trying to call the click method on a null value. To solve the error, run the JS script after the DOM elements are available and make sure you only call the method on valid DOM elements.
The "Cannot read property 'value' of null" error occurs when: trying to access the value property on a null value, e.g. after calling getElementById with an invalid identifier. inserting the JS script tag before the DOM elements have been declared.
The “cannot read property of undefined” error occurs when you attempt to access a property or method of a variable that is undefined . You can fix it by adding an undefined check on the variable before accessing it.
The "Uncaught TypeError: Cannot set properties of null (setting 'value')" error occurs in JavaScript, whenever you try to set a property on an object that is null . In order to fix the error, you need to ensure that the object exists, and its value is not null .
String#match returns either null (no match) or an array with the matches.
var domain = link.href.match(/(https?:\/\/.+?)\//)[1];
//                     ^^^^^
Workaround with check
var domain = link.href.match(/(https?:\/\/.+?)\//);
if (domain) {
    // do something with domain[1]
}
                        You can use an if statement to check if the match is null like the other answers have mentioned.
Or you can use the logical or operator to get it onto one line and make it cleaner e.g.
var domain = (link.href.match(/(https?:\/\/.+?)\//) || [])[1];
You get a Type error because when the match is false the function returns null and you cannot access index 1 of null as it is not an array.
null[1] causes a type error
By using the logical OR operator || the domain variable is set to second condition when the first condition is falsey.
So when the match is false the result defaults to an empty array [] and you can access any index of an empty array without getting an error and it results in undefined
This will make domain = undefined when the match is false.
I really wish type errors weren't a problem in JS especially with objects. I seem to have add a lot of if statement and extra code every other line just to deal with type errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With