Skip to content

josemalcher/Livro-Dominando-JavaScript-com-jQuery

Repository files navigation

Dominando JavaScript com jQuery

Link: https://www.casadocodigo.com.br/products/livro-javascript-jquery

Kanban: https://josemalcher.net/kanban/public/task/240/c1b8680b9e2b4305daf46fb0f202491ea8b958010a14999aebf4e6238976

Repsitório: https://github.com/josemalcher/Livro-Dominando-JavaScript-com-jQuery



Voltar ao Índice


A figura a seguir nos dá uma ideia melhor de como o servidor vai receber menos requisições.

cap2_EsquemaDeRequisicoes_ao_servidor

Voltar ao Índice


Document Object Model (ou Objeto Modelo do Documento), e é criada automaticamente pelo browser toda vez que carregamos um arquivo XML ou HTML válido. Esse arquivo é chamado de Documento, e cada item dentro dele (textos, imagens, botões, caixas de texto) é chamado genericamente de Elemento.

ExibindoDOMcomoArvore.PNG

3.4 LOCALIZANDO O VALOR TOTAL DO CARRINHO

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>CAP 3 - Adicinado JS</title>
</head>
<body>
    
    <table>
        <tbody>
            <tr>
                <td>
                    <div>R$ 29,90</div></dif>
                </td>
                <td>
                    <input type="number">
                </td>
            </tr>
        </tbody>
        <tr>
            <td></td>
            <td>Total da compra</td>
            <td><div id="total">R$ 29,90</div></td>
            <td></td>
        </tr>
    </table>

</body>
<script type="text/javascript"> //somente para estudos...isso aqui!!!
    
    //var total = document.getElementById("total");
    //alert(total.innerHTML);

    var total = document.getElementById("total");
    var formattedtext = floatToMoneyText(moneyTxtFLoat(total.innerHTML));
    alert(formattedtext === total.innerHTML); // true

    function moneyTxtFLoat(text){
        var cleanText = text.replace("R$ ", "").replace(",", ".");
        return parseFloat(cleanText);
    }

    function floatToMoneyText(value){
        var text = (value < 1 ? "0" : "") + Math.floor(value * 100);
        text = "R$ " + text;
        return text.substr(0, text.length - 2) + "," + text.substr(-2);
    }
    function readTotal(){
        var total = document.getElementById("total");
        return moneyTxtFLoat(total.innerHTML);
    }
    
    // 3.6 ALTERANDO O CAMPO DO TOTAL
    function writeTotal(value){
        var total = document.getElementById("total");
        total.innerHTML = floatToMoneyText(value);
    }
    

</script>
</html>

3.5 USANDO === E ==

A linha iniciada por => indica o resultado da expressão e não deve ser digitada:

2 == 2;
=> true
1 == "1";
=> true
0 == [];
=> true
0 == "";
=> true

Porém, quando você utiliza === , o JavaScript não converte tipos e verifica a igualdade dos valores, sem truques:

2 === 2;
=> true
1 === "1";
=> false
0 === [];
=> false
0 === "";
=> false

A menos que você tenha um motivo realmente bom para usar o operador de equivalência, use sempre === para evitar que erros

3.7 INCLUINDO UM ARQUIVO JAVASCRIPT NA PÁGINA

<script src='javascripts/rodus.js' type='text/javascript'></script>

3.10 CALCULANDO OS SUBTOTAIS DOS ITENS

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src='javascripts/rodus.js' type='text/javascript'></script>
    <title>CAP 3 - Adicinado JS</title>
</head>

<body>
    <table>
        <tbody>
            <tr class="produto">
                <td>
                    <div class="price">R$ 29,90</div>
                </td>
                <td>
                    <input type="number" class="quantity">
                </td>
            </tr>
            <tr class="produto">
                <td>
                    <div class="price">R$ 59,90</div>
                </td>
                <td>
                    <input type="number" class="quantity">
                </td>
            </tr>
            <tr class="produto">
                <td>
                    <div class="price">R$ 99,90</div>
                </td>
                <td>
                    <input type="number" class="quantity">
                </td>
            </tr>
        </tbody>
        <tr>
            <td></td>
            <td>Total da compra</td>
            <td>
                <div id="total">R$ 189,70</div>
            </td>
            <td></td>
        </tr>
    </table>

</body>

</html>
//var total = document.getElementById("total");
//alert(total.innerHTML);

//var total = document.getElementById("total");
//var formattedtext = floatToMoneyText(moneyTxtFLoat(total.innerHTML));
//alert(formattedtext === total.innerHTML); // true

function moneyTxtFLoat(text) {
    var cleanText = text.replace("R$ ", "").replace(",", ".");
    return parseFloat(cleanText);
}

function floatToMoneyText(value) {
    var text = (value < 1 ? "0" : "") + Math.floor(value * 100);
    text = "R$ " + text;
    return text.substr(0, text.length - 2) + "," + text.substr(-2);
}
function readTotal() {
    var total = document.getElementById("total");
    return moneyTxtFLoat(total.innerHTML);
}

// 3.6 ALTERANDO O CAMPO DO TOTAL
function writeTotal(value) {
    var total = document.getElementById("total");
    total.innerHTML = floatToMoneyText(value);
}
//writeTotal(3.143302);     

/* var produtos = document.getElementsByClassName("produto");
console.log(produtos);

for(var pos = 0; pos < produtos.length; pos++) {
    var priceElements =  produtos[pos].getElementsByClassName("price");
    var priceText = priceElements[0].innerHTML;
    var price = moneyTxtFLoat(priceText);
    console.log(price);
} */
function calculateTotalProducts() {
    var produtos = document.getElementsByClassName("produto");

    var totalProdutos = 0;

    for (var pos = 0; pos < produtos.length; pos++) {
        var priceElements = produtos[pos].getElementsByClassName("price");
        var priceText = priceElements[0].innerHTML;
        var price = moneyTextToFloat(priceText);

        var qtyElements = produtos[pos].getElementsByClassName("quantity");
        var qtyText = qtyElements[0].value;
        var quantity = moneyTextToFloat(qtyText);

        var subtotal = quantity * price;

        totalProdutos += subtotal;

    }

    return totalProdutos;
}

3.11 ENTENDENDO EVENTOS

function quantidadeMudou() {
    writeTotal(calculateTotalProducts());
}
function onDocumentoLoad() {
    var textEdits = document.getElementsByClassName("quantity");
    for(var i = 0; i < textEdits.length; i++) {
        textEdits[i].onchange = quantidadeMudou;
    }
}
window.onload = onDocumentoLoad;

Voltar ao Índice


4.2 QUANDO NÃO EXISTE UMA DETERMINADA FUNÇÃO

if (document.getElementsByClassName == undefined) {
    alert("getElementsByClassName not found");
    document.getElementsByClassName = function(className) {
        alert("Regozijai-vos, usuários de Internet Explorer");
    }
}

var todosElementos = document.getElementsByTagName("*");
var resultados = [];
var elemento;
for (var i = 0; (elemento = todosElementos[i]) != null; i++) {
    var elementoClass = elemento.className;
    if (elementoClass &&elementoClass.indexOf(className) != -1) {
            resultados.push(elemento);
    }
}
return resultados;
  • 03-AdicionandoJavaScript/javascripts/rodus.js
/*
function quantidadeMudou() {
    writeTotal(calculateTotalProducts());
}
function onDocumentoLoad() {
    var textEdits = document.getElementsByClassName("quantity");
    for(var i = 0; i < textEdits.length; i++) {
        textEdits[i].onchange = quantidadeMudou;
    }
}
*/
function onDocumentoLoad() {
    var textEdits = document.getElementsByClassName("quantity");
    for(var i = 0; i < textEdits.length ; i++){
        textEdits[i].onchange = function () {
            writeTotal(calculateTotalProducts());
        }
    }
}

window.onload = onDocumentoLoad;

4.3 FUNÇÕES ANÔNIMAS E NOMEADAS

function() {
console.log("Nunca serei executado :'( ")
}
var olaMundo = function() {
console.log("Serei executado =D");
}
olaMundo();
function quantidadeMudou() {
    writeTotal(calculateTotalProducts());
}
function onDocumentLoad() {
    var textEdits = document.getElementsByClassName("quantity");
    for(var i = 0; i < texts.length; i++) {
        textEdits[i].onchange = quantidadeMudou;
    }
}

Melhorando:

function onDocumentLoad() {
    var textEdits = document.getElementsByClassName("quantity");
        for(var i = 0; i < texts.length; i++) {
            textEdits[i].onchange = function() {
            writeTotal(calculateTotalProducts());
        };
    }
}

Voltar ao Índice


  • 5.3 ENTENDA JQUERY EM CINCO MINUTOS
<!doctype html>
<html lang="pt_BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>5 - Simplifique com jQuery</title>
</head>
<body>

<p class="par">Primeira linha</p>
<p class="impar">Segunda linha</p>
<input type="text" id="texto" class="par" value="um texto qualquer">

<script type="application/javascript" src="js/jquery-3.3.1.min.js"></script>
<script>
    $("p").css("background-color", "lightgreen");
    $(".par").css("background-color", "lightblue");
    $("#texto").css("color","white").val("ESSE É O NOVO TEXTO");
</script>
</body>
</html>

Voltar ao Índice


  • Inicial:
<!doctype html>
<html lang="pt_Br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>6 DOMINANDO EVENTOS E MANIPULAÇÃO DE DOM COM JQUERY</title>
</head>
<body>
<h2>TODO List</h2>
<input type="text" id="tarefa">
<div id="tarefa-lista">
    <div class="tarefa-item">
        <div class="tarefa-texto">Comprar pão</div>
        <div class="tarefa-delete"></div>
        <div class="clear"></div>
    </div>
</div>
<script type="application/javascript" src="js/jquery-3.3.1.min.js"></script>
<script>

    $("#tarefa").off(); // retirar os eventos associados ao elemento
    $("#tarefa").keydown(function (event) {
        //console.log(event.which, String.fromCharCode(event.which));
        if(event.which === 13) {
            console.log("AQUI VAMOS ADD UMA TARAFA");
        }
    })
</script>
</body>
</html>

6.3 DESASSOCIANDO EVENTOS

$("#tarefa").off("keydown.primeiro", function() { //.on ou .off
       console.log("Esse é o primeiro evento");
   });
   $("#tarefa").on("keydown.segundo", function() {
       console.log("Esse é o segundo evento");
   });

6.4 REMOVENDO ITENS COM ESTILO

$(function(){

    /* 6.4 REMOVENDO ITENS COM ESTILO */
    function onTarefaDeleClick() {
        //console.log($(this).parent('.tarefa-item').text().trim());
        $(this).parent('.tarefa-item').hide('slow', function () {
            $(this).remove();
        });
    }

    $('.tarefa-delete').click(onTarefaDeleClick);

});

6.6 EDITANDO APENAS UM ITEM DE CADA VEZ

Voltar ao Índice


var servico = "http://livro-capitulo07.herokuapp.com/hello";
	$.get(servico, function(data) {
		alert(data);
	});
var parametros = {nome: "Caro Leitor"};
var servico = "http://livro-capitulo07.herokuapp.com/hello";
$.get(servico, parametros, function(data) {
    alert(data);
});

7.5 O OBJETO JQXHR

"esse objeto pode intermediar e controlar toda a conversação entre o seu código JavaScript e o servidor que vai nos fornecer os dados."

"O objeto jqXHR permite que sejam definidos callbacks para quando a requisição correu bem e para quando houve algum erro."

var parametros = {nome: "Caro Leitor"};
var servico = "http://livro-capitulo07.herokuapp.com/hello";
var $xhr = $.get(servico, parametros);
$xhr.done(function(data) {
	alert(data);
});

melhorando...

var parametros = {nome: "Caro Leitor"};
var servico = "http://livro-capitulo07.herokuapp.com/hello";
$.get(servico, parametros)
    .done(function(data) {
alert(data);
});

Erro proposital

var servico = "http://livro-capitulo07.herokuapp.com/error";
$.get(servico)
.fail(function(data) {
	alert(data.responseText);
});

Lista de códigos de estado HTTP: https://pt.wikipedia.org/wiki/Lista_de_c%C3%B3digos_de_estado_HTTP

7.6 E O QUE É O JSON?

http://json.org

var servico = "http://api.postmon.com.br/v1/cep/";
var cep = "04101-300";
function onCepDone(data) {
    console.log("A Casa do Código fica na " + data.logradouro);
}
$.getJSON(servico + cep)
.done(onCepDone);

Com Erro:

var servico = "http://api.postmon.com.br/v1/cep/";
var cep = "12345-789";
function onCepDone(data) {
    console.log("A Casa do Código fica na " + data.logradouro);
}
function onCepError(error) {
    console.log("Erro: " + error.statusText)
};
$.getJSON(servico + cep)
    .done(onCepDone)
    .fail(onCepError);

Problemas com CORS

A primeira é chamada de Cross-Origin Resource Sharing, e é habilitada quando o servidor que está nos fornecendo os dados insere o cabeçalho Access-Control-Allow-Origin: * na resposta HTTP. Essa é a forma mais limpa e padronizada de acessarmos outro domínio usando AJAX, mas tem uma série de problemas e limitações. A maior delas, sem dúvida, é quando estamos acessando um servidor que não inclui esse cabeçalho na resposta

--disable-web-security CHROME

Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


Voltar ao Índice


About

Livro Casa do Código - Dominando JavaScript com jQuery

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published