Conceptually I think it might be helpful for you to see this in plain JavaScript. jQuery is doing this stuff in the background of the html command.
// First Get your Selector
let s = document.querySelector('div');
// Create your element and add any necessary details
let b = document.createElement('button');
b.className = 'mdl-button';
// create your icon and add details
let i = document.createElement('i');
i.className = 'material-icons mdl-color-text--green-600';
i.innerText = "";
// add icon to button, and button to div element
b.appendChild(i);
s.appendChild(b);
In your attempt you are doing several things to the same element which causes them to overwrite. Instead you would want to create the elements and then append them.
// get your root element, build button and icon
let baseElement = $('div')
, button = $('<button>').addClass('mdl-button')
, icon = $('<i>').addClass('material-icons mdl-color-text--green-600').text('');
// append elements
button.append(icon);
baseElement.append(button);