none
Pegar o value de uma cell table usando o valor da coluna e da linha em Javascript (e.Row[2].Column[3].value em javascript) RRS feed

  • Pergunta

  • Olá a todos, estou tendo um pequeno problema, eu gostaria de poder pegar o conteudo de uma cell table usando o numero da linha e da coluna, sem que haja necessidade de clickar na celula , somente tendo sua coordenada dentro da tabela (linha,coluna), eu tenho aqui um trecho onde eu retiro:

     loadFormEventsFromTable: function(field, fields, formula) {
                //loadFormEventsFromTable(' + field1 + ',' + campos + ',' + formula + ');
    
                var table = document.getElementById("#_x" + servicePortfolio.property + "x_");
                var cells = table.getElementsByTagName('td');
                // cells.length -- quantas celulas tem
                $("#_x" + servicePortfolio.property + "x_").click(function(e) {
                    var $td = $(e.target).closest("td");
                    var currentCellText = $td.text();
                    var RowIndex = $td.parent().attr("sectionRowIndex"); //linha
                    var ColIndex = $td.parent().children().index($td); //coluna
                    var value = document.getElementById(field).value; //valor do campo formula onde eu devo jogar o resultado    
                });
            },

    Eu ja tenho o valor da linha e coluna, pegando isso gostaria de ter acesso ao conteúdo, mais ow menos parecido com um grid view onde se passa o   e.Row[2].Column[3].value algo parecido com isso, alguem teria algum tutorial que poderia estar me auxiliando ?

    Atenciosamente

    Marcus Fernando

    segunda-feira, 21 de outubro de 2013 12:37

Respostas

  • Encontrei uma forma, porém tive de adicionar mais um campo ao td da tabela, para ter uma referencia "rel" para cada celula, representado a coluna

    temp += '<td><input class="field-number" rel=' + result[i].h + '  id="' + field1 + '" type="text"  " /></td>';
                                                $("#" + field1).live('click', function() {
                                                    var tr = $(this).parent().parent();
                                                    servicePortfolio.ativaFormulas(tr, esp, '"' + result[i].e + '"', result[i].h);
                                                });

    e no live click eu pego o numero da linha , e percorro todas as td com base na referencia do "input rel", dessa forma:

     $(tr).find('td>input[rel="c2"]').val();

    e passo dinamicamente os valores da coluna em formato parseInt:

     ativaFormulas: function(tr, campos, formula, colunaResposta) {
                servicePortfolio.m_calcule = new window.servicePortfolio.CalcJS();
                var results = campos.split(';');
                var fields = [];
                var Campo = [];
                var Valor = [];
                for (var ef in results) {
                    if (results[ef].toLowerCase().indexOf("c") != -1) {
                        Campo.push(results[ef].toLowerCase());
                        Valor.push($(tr).find('td>input[rel="' + parseInt(results[ef].toLowerCase().replace("c", "").replace("\"", "")) + '" ]').val());
                    }
                }
                var objeto = {};
                for (var i in Campo) {
                    tc = $.trim(Campo[i]);
                    fed = $.trim(Valor[i]);
                    objeto[tc.toString().toLowerCase()] = fed;
                }
                servicePortfolio.m_calcule.calc(objeto);
                servicePortfolio.m_calcule.calc({ 'calculo': formula.toLowerCase().replace("\"", "").replace("\"", "") });
                $(tr).find('input[rel="' + parseInt(colunaResposta) + '"]').val(servicePortfolio.m_calcule.variables.calculo);
            },

    A forma coerente foi adicionar um campo rel ao input e buscar por aquele rel na respectiva linha

    • Marcado como Resposta marcusfcbarbosa sexta-feira, 25 de outubro de 2013 17:54
    sexta-feira, 25 de outubro de 2013 17:54

Todas as Respostas

  • Com jQuery é fácil:

    <html>
    	<head>
    		<script type="text/javascript" src="jquery-1.10.2.js"></script>	
    	</head>
    	<body>
    		<script type="text/javascript" charset="ISO-8859-1">			
    			$(function() { 
    				var texto =  $("#idDaTabela tr:nth-child(1) td:nth-child(1)").text();
    				alert(texto);
    			})			
    		</script>
    		
    		<table id="idDaTabela">			
    			<tr>			
    				<td> celula 1,1 </td>			
    				<td> celula 1,2 </td>				
    			</tr>			
    			<tr>			
    				<td> celula 2,1 </td>			
    				<td> celula 2,2 </td>				
    			</tr>			
    		</table>
    	</body>
    </html>


    • Sugerido como Resposta Vitor Mendes segunda-feira, 21 de outubro de 2013 13:31
    segunda-feira, 21 de outubro de 2013 12:53
  • Olha, nao sei se foi erro de digitação, mas nao teve efeito nenhum nao:

    var texto = $("#_x" + servicePortfolio.property + "x_"+" tr:nth-child(1) td:nth-child(3)").text();

    Atenciosamente

    segunda-feira, 21 de outubro de 2013 18:22
  • Só funciona com a versao 1.10 ??
    segunda-feira, 21 de outubro de 2013 18:27
  • Encontrei uma forma, porém tive de adicionar mais um campo ao td da tabela, para ter uma referencia "rel" para cada celula, representado a coluna

    temp += '<td><input class="field-number" rel=' + result[i].h + '  id="' + field1 + '" type="text"  " /></td>';
                                                $("#" + field1).live('click', function() {
                                                    var tr = $(this).parent().parent();
                                                    servicePortfolio.ativaFormulas(tr, esp, '"' + result[i].e + '"', result[i].h);
                                                });

    e no live click eu pego o numero da linha , e percorro todas as td com base na referencia do "input rel", dessa forma:

     $(tr).find('td>input[rel="c2"]').val();

    e passo dinamicamente os valores da coluna em formato parseInt:

     ativaFormulas: function(tr, campos, formula, colunaResposta) {
                servicePortfolio.m_calcule = new window.servicePortfolio.CalcJS();
                var results = campos.split(';');
                var fields = [];
                var Campo = [];
                var Valor = [];
                for (var ef in results) {
                    if (results[ef].toLowerCase().indexOf("c") != -1) {
                        Campo.push(results[ef].toLowerCase());
                        Valor.push($(tr).find('td>input[rel="' + parseInt(results[ef].toLowerCase().replace("c", "").replace("\"", "")) + '" ]').val());
                    }
                }
                var objeto = {};
                for (var i in Campo) {
                    tc = $.trim(Campo[i]);
                    fed = $.trim(Valor[i]);
                    objeto[tc.toString().toLowerCase()] = fed;
                }
                servicePortfolio.m_calcule.calc(objeto);
                servicePortfolio.m_calcule.calc({ 'calculo': formula.toLowerCase().replace("\"", "").replace("\"", "") });
                $(tr).find('input[rel="' + parseInt(colunaResposta) + '"]').val(servicePortfolio.m_calcule.variables.calculo);
            },

    A forma coerente foi adicionar um campo rel ao input e buscar por aquele rel na respectiva linha

    • Marcado como Resposta marcusfcbarbosa sexta-feira, 25 de outubro de 2013 17:54
    sexta-feira, 25 de outubro de 2013 17:54