J'ai du HTML qui ressemble à ceci:

<td class="targetTD">
  <a href="http://foo.com">
    <span>content</span>
  </a>
  **Text I want to modify**
  <span>more content</span>
</td>

targetTD itère un nombre dynamique de fois en fonction du contenu rendu. Pour chaque itération, je dois supprimer une sous-chaîne de ":" au début du code dans le bloc de texte. Malheureusement, ce n'est pas dans son propre élément et je n'ai pas la possibilité de l'envelopper dans une classe / id propre et bien rangé. J'ai fait quelques recherches et trouvé des js qui pourraient faire l'affaire:

<script>
var myString = $('.targetTD').html();
myString = myString.replace(': ','');
$('.targetTD').html(myString);
</script>

Mais cela crache une erreur de console:

Impossible d'obtenir la propriété 'replace' d'une référence non définie ou nulle.

Mise à jour finale (solution)

Merci à @Vaibhav d'avoir trouvé un correctif! Ce script a fait l'affaire:

<script type="text/javascript">

    $(function() {
        $('.targetTD').each(function () {
            $(this).html($(this).html().replace(/\:\s/g, ''));
        });
    });

</script>

Mise à jour 1

Grâce à @BenM, j'ai pu empêcher l'erreur de se produire en utilisant le code suivant:

<script>
$(function() {
    $('.targetTD').html(function() { $(this).html().replace(': ', ''); });
});
</script>

Bien que je n'obtienne plus de message d'erreur, cela ne supprime toujours pas le ":" du bloc de texte. Des idées sur pourquoi cela pourrait être?

Update 2

Pour fournir de manière générale certaines spécificités de SharePoint, en réponse à un commentaire de @ElvisLikeBear:

  • La tâche spécifique que j'essaie d'accomplir consiste à masquer le nom de la colonne d'une liste groupée par. Dans SP2010, cela était facile à faire en masquant la classe ms-gb. En 2013, Microsoft a regroupé le bouton développer / réduire avec cette classe, donc le cacher en gros n'est pas une option. J'ai réussi à masquer la plage avec le nom de la colonne (dans mon code ci-dessus, la plage enveloppée dans le a), mais le ":" est toujours inutile dans le bloc de texte, et maintenant il flotte juste là au début de chaque catégorie Nom.

  • Le code est déployé au niveau de la page sous forme d'extrait, à l'aide du composant WebPart Éditeur de script.

3
Brendan W 18 juil. 2015 à 01:26

3 réponses

Meilleure réponse

Brendan, le problème avec votre code est que vous remplacez le ':' par '' mais que vous ne l'affectez plus au même td.

La fonction Replace(':','') ne remplace que la première occurrence de ':'. Veuillez suivre mon code. il remplacera tous les ':' par ''.

Avec référence à "targetTD itère un nombre dynamique de fois en fonction du contenu rendu"

Je suppose que vous avez besoin de boucle foreach pour parcourir tous les Tds.

Html: -

<table>
    <tr>
        <td class="targetTD">
            <a href="http://foo.com">
                <span>content</span>
            </a>
            Test:Test1
            <span>more content</span>
        </td>
    </tr>
    <tr>
        <td class="targetTD">
            <a href="http://foo.com">
                <span>content</span>
            </a>
            Test:Test1:test2
            <span>more content</span>
        </td>
    </tr>
    <tr>
        <td class="targetTD">
            <a href="http://foo.com">
                <span>content</span>
            </a>
            Test:Test1:test3:test4
            <span>more content</span>
        </td>
    </tr>
</table>

Jquery: -

<script type="text/javascript">

    $(function() {
        $('.targetTD').each(function () {
            $(this).html($(this).html().replace(/\:/g, ''));
        });
    });
    </script>

Le script est testé et fonctionne très bien.

1
Vaibhav 21 juil. 2015 à 10:39

Votre balise indique que cela s'exécute sur un site SharePoint, c'est pourquoi votre code ne se déclenche pas. Vous devez le déployer correctement pour SharePoint.

Vous pouvez le faire dans une solution ou une fonctionnalité, ou s'il s'agit d'un script d'une page, vous devez utiliser un composant WebPart de script (appelé le composant WebPart Éditeur de contenu dans SharePoint 2010 et 2007), vous pouvez également ajouter un extrait de code à la page dans SharePoint 2013 .

Vous pouvez également ajouter le script dans la balise via Concepteur SharePoint cependant, je ne pense pas que ce serait la meilleure pratique, sauf dans certains scénarios très spécifiques (mais ce serait l'approche la plus simple pour un développeur non-SharePoint).

0
Michael A 20 juil. 2015 à 06:21

Assurez-vous que le DOM est prêt:

<script>
$(function() {
    $('.targetTD').html(function() { $(this).html().replace(': ', ''); });
});
</script>
0
BenM 17 juil. 2015 à 22:44