Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 04/12/2009, 17h11   #1 (permalink)
Membre du Club
 
Nom : N A
Date d'inscription: novembre 2009
Messages: 84
Par défaut [IE]getElement sur ie

Bonsoir a tous,

Voici mon probleme sur lequel je planche depuis 2h..!!!

je génère un tr avec javascript :
Code :
var tr = "<tr class='vossers-filterrow'>" + tdset + "</tr>";
que j'insere apres un autre tr.
Sous opera, firefox, j'arrive a le récupérer ainsi:
Code :
 
function MaskFilter()
{
    var list_tr = document.getElementsByTagName('tr');
    for(var i=0; i<list_tr.length; i++)
    {
      if(list_tr[i].className == "vossers-filterrow")
           list_tr[i].style.display="none";
    }
}
 
seulement sur IE ca ne fonctionne pas..j'ai essayé de mettre un id lors de la génération, ie me dit que le getElementById est null..
dans les 2 cas, je n'arrive meme pas a voir l'élément avec iedevtoolbar..
help plzzz
HeB91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 17h28   #2 (permalink)
Modérateur
 
Date d'inscription: janvier 2007
Messages: 7 439
Par défaut

Bonjour,
Citation:
Envoyé par HeB91 Voir le message
je génère un tr avec javascript :
Code :
var tr = "<tr class='vossers-filterrow'>" + tdset + "</tr>";
que j'insere apres un autre tr.
On peut voir les autres étapes ?
=> le contenu de tdset et les instruction d' "insertion"

En fait la fonction complète serait souhaitable

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h04   #3 (permalink)
Membre du Club
 
Nom : N A
Date d'inscription: novembre 2009
Messages: 84
Par défaut

voila le script utilisé que j'éssai de décortiquer
Code :
// SharePoint InstantListFilter - developed by Jaap Vossers
 
$(document).ready(function()
{	
	jQuery.extend(jQuery.expr[':'], {
	  containsIgnoreCase: "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase().indexOf((m[3]||'').toLowerCase())>=0"
	});
 
	
	$("table.ms-listviewtable tr.ms-viewheadertr").each(function()
	{
		if($("td.ms-vh-group", this).size() > 0)
		{
			return;	
		}
		
		var tdset = "";
		
		var colIndex = 0;
		
		$(this).children("th,td").each(function()
		{
			if($(this).hasClass("ms-vh-icon"))
			{
				// attachment
				tdset += "<td></td>";
			}
			else
			{
				// filterable
				tdset += "<td><input type='text' class='vossers-filterfield' filtercolindex='" + colIndex + "' /></td>";				
			}
			
			colIndex++;
		});
		var tr = "<tr class='vossers-filterrow'>" + tdset + "</tr>";
		$(tr).insertAfter(this);
//        var list_tr = document.getElementsByTagName('tr');
//        for(var i=0; i<list_tr.length; i++)
//        {
//          if(list_tr[i].className == "ms-viewheadertr")
//               list_tr[i].parentElement.insertBefore(tr,list_tr[i].nextSibling);
//        }
		
	});	
	
	
	$("input.vossers-filterfield")
		.css("border", "1px solid #7f9db9")
		.css("width", "100%")
		.css("margin", "2px")
		.css("padding", "2px")
		.keyup(function()
		{			
			var inputClosure = this;
			
			if(window.VossersFilterTimeoutHandle)
			{
				clearTimeout(window.VossersFilterTimeoutHandle);
			}
			
			window.VossersFilterTimeoutHandle = setTimeout(function()
			{
				var filterValues = new Array();
				
				$("input.vossers-filterfield", $(inputClosure).parents("tr:first")).each(function()
				{				
					if($(this).val() != "")				
					{
						filterValues[$(this).attr("filtercolindex")] = $(this).val();
					}
				});		
				
							
				$(inputClosure).parents("tr.vossers-filterrow").nextAll("tr").each(function()
				{
					var mismatch = false;
					
					$(this).children("td").each(function(colIndex)
					{
						if(mismatch) return;
						
						if(filterValues[colIndex])
						{
							var val = filterValues[colIndex];
							
							// replace double quote character with 2 instances of itself
							val = val.replace(/"/g, String.fromCharCode(34) + String.fromCharCode(34));							
																				
							if($(this).is(":not(:containsIgnoreCase('" + val + "'))"))
							{
								mismatch = true;
							}						
						}
					});
					
					if(mismatch)
					{
						$(this).hide();
					}
					else
					{
						$(this).show();
					}		
				});				
				
			}, 250);
		});
});
HeB91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h08   #4 (permalink)
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Date d'inscription: mars 2002
Localisation: Au coeur de la Nébuleuse de la Rainette
Messages: 22 580
Par défaut

Personnellement je m'entête à passer par le DOM pour crée des éléments sur une page ...
ça m'évite juste ce genre de déconvenues
http://www.developpez.net/forums/d47...us-rapidement/
__________________
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
Citation:
Deux règles du succès:
1) Ne communiquez jamais à quelqu'un tout votre savoir...

Votre post a trouvé une réponse qui vous satisfait ? Alors n'oubliez pas le Tag

réalisations web (developpeur et/ou infographiste et/ou chef de projet:
www.saftair.com| www.ouestisol.fr | www.sebemex.fr
| www.sistac-alizay.fr | www.planet-languages.com | www.acoustishop.fr | www.litt.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h17   #5 (permalink)
Membre du Club
 
Nom : N A
Date d'inscription: novembre 2009
Messages: 84
Par défaut

Effectivement, j'ai déjà essayer d'une maniere similaire avec ce code :

Code :
var list_tr = document.getElementsByTagName('tr');
        for(var i=0; i<list_tr.length; i++)
        {
          if(list_tr[i].className == "ms-viewheadertr")
               list_tr[i].parentElement.insertBefore(tr,list_tr[i].nextSibling);
        }
Mais je vais rééssayer en suivant ta méthode, c-a-d en créant les éléments tr et td étant donné que le tableau éxiste déjà. Tu pense que cela résoudrais mon probleme?
HeB91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h42   #6 (permalink)
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Date d'inscription: mars 2002
Localisation: Au coeur de la Nébuleuse de la Rainette
Messages: 22 580
Par défaut

tu précises le tbody ?
__________________
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
Citation:
Deux règles du succès:
1) Ne communiquez jamais à quelqu'un tout votre savoir...

Votre post a trouvé une réponse qui vous satisfait ? Alors n'oubliez pas le Tag

réalisations web (developpeur et/ou infographiste et/ou chef de projet:
www.saftair.com| www.ouestisol.fr | www.sebemex.fr
| www.sistac-alizay.fr | www.planet-languages.com | www.acoustishop.fr | www.litt.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h45   #7 (permalink)
Membre du Club
 
Nom : N A
Date d'inscription: novembre 2009
Messages: 84
Par défaut

comment ça? le tbody existe déjà.

Je suis un peu perdu, j'ai tenté quelque chose mais sans résultat, je ne vois toujours pas la ligne dans iedevtoolbar et le code ne doit pas etre bon car je n'ais pas de le résultat attendu..
Code :
// Création des éléments de la ligne de filtre
		var tr=document.createElement('tr');
		var td_empty=document.createElement('td');
		var td_full=document.createElement('td');
		var td_input=document.createElement('input');
		td_input.setAttribute('type','text');
		td_input.setAttribute('class','vossers-filterfield');
		td_input.setAttribute('filtercolindex','vossers-filterfield');
		td_full.appendChild(td_input);
		
		var colIndex = 0;
		
		$(this).children("th,td").each(function()
		{
			if($(this).hasClass("ms-vh-icon"))
			{
				// attachment
				//tdset += "<td></td>";
				tr.appendChild(td_empty);
			}
			else
			{
				// filterable
				//tdset += "<td><input type='text' class='vossers-filterfield' filtercolindex='" + colIndex + "' /></td>";				
				td_input.setAttribute('filtercolindex',colIndex);
				td_full.replaceChild(td_input,td_input);
				tr.appendChild(td_full);
			}
			colIndex++;
		});
		//var tr = "<tr class='vossers-filterrow'>" + tdset + "</tr>";
		
		
		
		// Insertion DOM
		// On récupere la premiere ligne de la liste (le header)
		var list_tr = document.getElementsByTagName('tr');
        for(var i=0; i<list_tr.length; i++)
        {
          if(list_tr[i].className == "ms-viewheadertr")
               list_tr[i].parentElement.insertBefore(tr,list_tr[i].nextSibling);
        }
		//$(tr).insertAfter(this);
        
		
	});
HeB91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h47   #8 (permalink)
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Date d'inscription: mars 2002
Localisation: Au coeur de la Nébuleuse de la Rainette
Messages: 22 580
Par défaut

il faut appender un tr dans le tbody
__________________
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
Citation:
Deux règles du succès:
1) Ne communiquez jamais à quelqu'un tout votre savoir...

Votre post a trouvé une réponse qui vous satisfait ? Alors n'oubliez pas le Tag

réalisations web (developpeur et/ou infographiste et/ou chef de projet:
www.saftair.com| www.ouestisol.fr | www.sebemex.fr
| www.sistac-alizay.fr | www.planet-languages.com | www.acoustishop.fr | www.litt.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 10h51   #9 (permalink)
Membre du Club
 
Nom : N A
Date d'inscription: novembre 2009
Messages: 84
Par défaut

Code :
list_tr[i].parentElement.insertBefore(tr,list_tr[i].nextSibling);
Le parentElement est le tbody

EDIT : faut-il spécifier à la nouvelle ligne
Code :
display: table-row
comme propriété css?

Dernière modification par HeB91 ; 07/12/2009 à 11h05.
HeB91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 11h16   #10 (permalink)
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Date d'inscription: mars 2002
Localisation: Au coeur de la Nébuleuse de la Rainette
Messages: 22 580
Par défaut

mmmh du coup je me demande sur quoi pointe le nextSibling ...
il faut se mefier du nextSibling, l'interprétation des nodes etant differentre d'un browser à l'autre
__________________
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
Citation:
Deux règles du succès:
1) Ne communiquez jamais à quelqu'un tout votre savoir...

Votre post a trouvé une réponse qui vous satisfait ? Alors n'oubliez pas le Tag

réalisations web (developpeur et/ou infographiste et/ou chef de projet:
www.saftair.com| www.ouestisol.fr | www.sebemex.fr
| www.sistac-alizay.fr | www.planet-languages.com | www.acoustishop.fr | www.litt.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/12/2009, 11h51   #11 (permalink)
Membre du Club
 
Nom : N A
Date d'inscription: novembre 2009
Messages: 84
Par défaut

Bon, mon réel probleme était de n'éxécuter ce script que dans une seule page.
Car c'est une features que j'ai déployé et qui s'applique à toutes les pages..
J'ai réglé mon probleme autrement et d'ailleur c'était la meilleure façon je pense (au lieu de récupérer la ligne inséré et de l'a cacher sur les pages dont je ne voulais pas m'en servir). J'ai juste laissé dans le head de la masterpage l'appel au script jquery et j'ai créer un editeur de contenu sur la page pour insérer la ligne avec le code javascript.
Merci de tes réponses!
HeB91 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 08h10.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.