使用jquery

时间:2015-08-12 02:30:09

标签: javascript php jquery html dom

我只想更改标签内部匹配的确切单词,而不是所有标签。 onload是最好的方法吗?我尝试在php中使用str_repace但由于某种原因它在一个页面上工作但在页面上没有我需要它来处理。

<?php 
     $var = "<em>Bicycle</em>";
     echo str_replace($var, "Bicycle", "(something different)");
    ?>

现在我已经尝试了一些不同的html dom方法和一些javascript。

  <em>Bicycle</em>

<script>
document.getElementsByTagName("em").innerHTML = "(something different)";
</script>
<?php foreach ($this->components as $id => $comp): ?>
        <tr class="row">
            <td class="col1">
                <img src="<?php echo $this->baseUrl('images/' . $comp->img_src) ?>"
                     alt="<?php echo $this->translate(sprintf($comp->translation_key, 'name')) ?>">
            </td>
            <td class="col2">
                <?php echo $this->translate(sprintf($comp->translation_key, 'name')) ?>
                <em><?php echo $this->translate(sprintf($comp->translation_key, 'description')) ?></em>
            </td>
            <td class="col3">
                <?php echo $this->formCheckbox(
                    "insurance[$id]", '1', !empty($this->order['insurance'][$id]), array('class' => 'row-checkbox')
                ) ?>
                <label for="checkbox"><?php echo $this->translate(
                        'order_additional_insurance_checkbox_label'
                    ) ?></label>
            </td>
            <td class="col4"><?php echo $this->translate(sprintf($comp->translation_key, 'dimensions_metric')) ?>
                <em><?php echo $this->translate(sprintf($comp->translation_key, 'dimensions_customary')) ?></em>
            </td>
            <td class="col5">
                <span class="rent">$<?php echo $comp->price ?></span>
            </td>
            <td class="col6">
                <div class="field-holder counter-holder row-qty" data-max-val="99">
                    <?php echo $this->formText(
                        "components[{$id}][quantity]",
                        (int)$this->order['components'][$id]['quantity'],
                        array(
                            'class' => 'required-aggregate-quantity',
                            'id'    => "component_{$id}_quantity"
                        )
                    ) ?>
                    <a class="btn-top" href="#">top</a>
                    <a class="btn-bottom" href="#">bottom</a>
                </div>
            </td>
            <td class="col7">
                <?php
                $rowCost = (int)$this->order['components'][$id]['quantity'] * $comp->price;
                ?>
                <span class="cost">$<?php echo number_format($rowCost, 2) ?></span>
            </td>
        </tr>
    <?php endforeach; ?>

专注于翻译密钥'name'。

2 个答案:

答案 0 :(得分:1)

虽然您指定了jQuery,但您可以使用JavaScript,但是您使用的是getElementsByTagName错误。

getElementsByTagName返回一个数组,您必须指定需要编辑数组中的哪一个。该演示应该为您提供足够的信息。

您没有指定数组中哪一个需要更改(document.getElementsByTagName("em").innerHTML),因此没有任何变化。

<em>Hello</em>
<em>Hello</em>
<em>Hello</em>
<em>Hello</em>
<em>Hello</em>
<em>Hello</em>

document.getElementsByTagName("em")[0].innerHTML = "GAH!";

将返回

GAH! Hello Hello Hello Hello Hello

http://jsfiddle.net/0jqvn9v2/

答案 1 :(得分:1)

您可以将 html() 与回调函数一起使用来迭代它们。要替换文本,请使用replace()方法

$('em').html(function(i, v) {
  return v.replace("Bicycle", "(something different)");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<em>Bicycle</em>

如果内容是特定的,那么,

$('em').html(function(i, v) {
  return v === "Bicycle" ? "(something different)": v;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<em>Bicycle</em>