Что не так с моим содержит (); функция в моем анализаторе XML? - PullRequest
0 голосов
/ 08 марта 2012

в полях Автор и Заголовок пользователь может вводить строки, такие как:

содержит объявление или содержит Джек или содержит подтверждение и т. Д..

и моя HTML-таблица будет отображать соответствующую информацию (например, книги, где заголовок (или автор, если мы говорим о поле автора ...) содержит данную подстроку .. Но это не работает ..Что я делаю не так? Я продолжаю получать contains is not defined в своей консоли ошибок ..

(кстати, все мои условные var author=... и т. Д. Определения должны быть перед if(moz)? В противном случае это будетработает только в Firefox, верно?)

 <html>
  <script type="text/javascript">

  function filterTable(f)
  {
  var xmlDoc = loadXML("books.xml");
  var stylesheet = loadXML("books.xsl");
  var moz = (typeof document.implementation.createDocument != 'undefined');
  var ie = (typeof window.ActiveXObject != 'undefined');

  if (moz)
  {
    var nsResolver = stylesheet.createNSResolver( stylesheet.ownerDocument == null ? stylesheet.documentElement : stylesheet.ownerDocument.documentElement);

    var value = stylesheet.evaluate("//xsl:template[@match='/']//xsl:for-each", stylesheet, nsResolver, XPathResult.ANY_UNORDERED_NODE_TYPE, null);


    var author = document.getElementById("inauthor").value;
    var title = document.getElementById("intitle").value;
    var filter = "";

    if (author != "")
    {
       if(contains(author,"contains"))
       {
              filter = filter + "contains(author," + "'" + author.substr(10) + "'" + ")";
       }

       else filter= filter + "author='" + author.substr(1) + "'";
    }

    if (title != "")
    {
        if (filter != "") filter = filter + " and ";

        if(contains(title,"contains"))
        {
          filter = filter + "contains(title," + "'" + title.substr(10) + "'" + ")";
        }

        else
        {
          filter = filter+ "title='" + title.substr(1) + "'";
        }
    }

    if (filter != "") filter = "[" + filter + "]";

    value.singleNodeValue.setAttribute("select", "books/scifi"+filter);

    var proc = new XSLTProcessor();
    proc.importStylesheet(stylesheet);
    var resultFragment = proc.transformToFragment(xmlDoc, document);
    document.getElementById("target4").appendChild(resultFragment);
  }

  else if (ie)
  {

    var value = stylesheet.selectSingleNode("//xsl:template[@match='/']//xsl:for-each");
    value.setAttribute("select", "books/scifi"+filter);
    document.write(xmlDoc.transformNode(stylesheet));
  }


 }

    </script>
<center>
  <table border="1" cellpadding="8">
  <tr><td>
  </br>
    <form>
      <center>
        <b> search by </b>
        Author(s): <input type="text" name="authors" id="inauthor"/>
        Title: <input type="text" name="title" id="intitle" />
        </br></br>
        <input type="button" value="Display" onClick="filterTable(this.form)"/>
     </center>
    </form>
   </td></tr>
   </table>
</center>

</body>

</html>

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Ваша ошибка в том, что вы думаете, что функции XPath доступны как функции JavaScript.Функция XPath contains(haystack, needle) доступна только в выражениях XPath.Таким образом, ваши if (contains(author,"contains")) и if(contains(title,"contains")) должны быть if(author.indexOf("contains") >= 0) и if (title.indexOf("contains") >= 0).Для дополнительного зачисления вы также должны экранировать любые ' символов в *blah*.substr(10), чтобы ваш код не взорвался, когда автора зовут «О'Мэлли, Лиам».

0 голосов
/ 08 марта 2012

Как проверить, содержит ли строка подстроку в JavaScript?

Обычно я ожидал бы метод String.contains (), но, похоже, его нетone.

indexOf возвращает позицию строки в другой строке.Если не найден, он вернет -1.

Редактировать:

if (contains(author,"contains")) {

Должно быть:

if (myString.indexOf(author) !== -1) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...